2011-05-03 106 views
4

我想弄清楚如何按最后一个键的值对数组进行排序,当键的数量未知时?php - 按数组中最后一个键的值排序?

所以,如果我有一个看起来像这样的数组:

Array(
    [0] => Array(
     [0] => Bob 
     [1] => A 
     [2] => Parker 
) 
    [1] => Array(
     [0] => John 
     [1] => Smith-Doe 
) 
    [2] => Array(
     [0] => Giuseppe 
     [1] => Gonzalez 
     [2] => Octavio 
     [3] => Hernandez 
) 
) 

我想通过数组中的最后一个值对它进行排序:

  • 朱塞佩·冈萨雷斯奥克塔维奥埃尔南德斯
  • 鲍勃·一Parker
  • John Smith-Doe

回答

5
$arr = array(
    array('Bob', 'A', 'Parker'), 
    array('John', 'Smith-Doe'), 
    array('Giuseppe', 'Gonzalez', 'Octavio', 'Hernandez') 
); 

usort($arr, 'sort_by_last_item'); 

var_dump($arr); 

function sort_by_last_item($a, $b) 
{ 
    return end($a) > end($b); 
} 

,或者如果你正在使用PHP 5.3:

$arr = array(
    array('Bob', 'A', 'Parker'), 
    array('John', 'Smith-Doe'), 
    array('Giuseppe', 'Gonzalez', 'Octavio', 'Hernandez') 
); 

usort($arr, function($a, $b) { return end($a) > end($b); }); 

var_dump($arr); 
+0

+1代码的简单性。 – Flipper 2011-05-03 23:49:13

+0

+1为好答案(如果我可以第二次为lambda) – 2011-05-04 02:41:39

1
$data = array(/* your data */); 
$output = array(); 

foreach ($data as $v) { 
    $output[ end($v) ] = $v; 
} 

ksort($output); 

var_dump($output); 

或者:

$data = array(/* your data */); 
$output = array(); 

foreach ($data as $v) { 
    $key = implode(' ', array_reverse($v)); 
    $output[ $key ] = $v; 
} 

ksort($output); 

var_dump($output); 

第二种方法让你有通过最后一个元素用相同的最后一个元素多条记录和排序,如果他们是平等的 - 按第一前年等等...

0

这工作:

function array_last_item_sort($array){ 
    $return = array(); 
    $sort = array(); 

    foreach($array as $i => $item){ 
     $sort[$i] = $item[count($item) - 1]; 
    } 

    asort($sort); 

    foreach($sort as $i => $value){ 
     $return[] = $array[$i]; 
    } 

    return $return; 
}