2011-05-03 108 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; 
}