2014-10-11 86 views
0
[a, 1, 3, 9, 0, 13] 
[b, 5, 6, 0, 0, 11] 
[j, 0, 6, 2, 1, 9] 
[c, 1, 0, 8, 5, 14] 
[d, 0, 0, 0, 17, 17] 
[e, 0, 5, 0, 0, 5] 
[h, 0, 0, 3, 3, 6] 

阵列需要在零的数的PHP通过键和非零排序多维数组值

  1. 升序进行排序。
  2. 最后一个元素值的升序。

所以排序后上述阵列应该是什么样子,

[j, 0, 6, 2, 1, 9] 
[a, 1, 3, 9, 0, 13] 
[c, 1, 0, 8, 5, 14] 
[h, 0, 0, 3, 3, 6] 
[b, 5, 6, 0, 0, 11] 
[d, 0, 5, 0, 0, 5] 
[d, 0, 0, 0, 17, 17] 

我通过这段代码排序多维数组通常对最后的值

function multiarraysorter($arr, $index) { 
    $b = array(); 
    $c = array(); 
    foreach ($arr as $key => $value) { 
     $b[$key] = $value[$index]; 
    } 

    asort($b); 

    foreach ($b as $key => $value) { 
     $c[] = $arr[$key]; 
    } 

    return $c; 
} 

任何想法如何完成首先根据值的数量来排序?

+0

你能格式化阵列和你想要的输出吗? – 2014-10-11 06:15:44

+0

尝试['usort'](http://php.net/manual/en/function.usort.php)关于第一级元素。 – Passerby 2014-10-11 06:17:07

回答

1

可以使用usort的任务是这样的:

$arr=[['a', 1, 3, 9, 0, 13],['b', 5, 6, 0, 0, 11],['j', 0, 6, 2, 1, 9],['c', 1, 0, 8, 5, 14],['d', 0, 0, 0, 17, 17],['e', 0, 5, 0, 0, 5],['h', 0, 0, 3, 3, 6]]; 

usort($arr,function($a,$b){ 
    $infoa=array_count_values($a); 
    $infob=array_count_values($b); 
    if(empty($infoa[0])) $infoa[0]=0; 
    if(empty($infob[0])) $infob[0]=0; 
    if($infoa[0]==$infob[0]) 
    { 
     return end($a)-end($b); 
    } 
    else 
    { 
     return $infoa[0]-$infob[0]; 
    } 
}); 

print_r($arr); 

3v4l.org demo

生成的输出是:

Array 
(
    [0] => Array 
     (
      [0] => j 
      [1] => 0 
      [2] => 6 
      [3] => 2 
      [4] => 1 
      [5] => 9 
     ) 

    [1] => Array 
     (
      [0] => a 
      [1] => 1 
      [2] => 3 
      [3] => 9 
      [4] => 0 
      [5] => 13 
     ) 

    [2] => Array 
     (
      [0] => c 
      [1] => 1 
      [2] => 0 
      [3] => 8 
      [4] => 5 
      [5] => 14 
     ) 

    [3] => Array 
     (
      [0] => h 
      [1] => 0 
      [2] => 0 
      [3] => 3 
      [4] => 3 
      [5] => 6 
     ) 

    [4] => Array 
     (
      [0] => b 
      [1] => 5 
      [2] => 6 
      [3] => 0 
      [4] => 0 
      [5] => 11 
     ) 

    [5] => Array 
     (
      [0] => e 
      [1] => 0 
      [2] => 5 
      [3] => 0 
      [4] => 0 
      [5] => 5 
     ) 

    [6] => Array 
     (
      [0] => d 
      [1] => 0 
      [2] => 0 
      [3] => 0 
      [4] => 17 
      [5] => 17 
     ) 

) 
0

试试这个它的工作:

<?php 
$res_ary = array(); 

    $res_ary = sortArray($arr,'key_value'); 
?> 

在sortArray函数中,您首先传递两个参数,一个是array您要缩短第二个是键值您必须对其进行排序。

<?php 

function sortArray($arrData, $p_sort_field, $p_sort_type = false) 
{ 
if(!empty($arrData)) 
{ 
    foreach($arrData as $data) 
    { 
    $newData [] = $data; 
    } 
    for($i=0; $i<count($newData); $i++) 
    {      
    $ar_sort_field[$i]=$newData[$i][$p_sort_field]; 
    } 
    array_multisort($ar_sort_field, ($p_sort_type ? SORT_DESC : SORT_ASC), $newData); 
    return $newData; 
} 
} 

?>