2013-03-15 51 views
0

我有一個用戶數組,我想根據它們的first_names按字母順序對它們進行排序。但事情是我保持first_name,last_name在數組元素的另一個陣列。從多維數組中獲取'相同的鍵'值

讓我的代碼解釋:

$users = [ 
    [ 
     'id' => 1, 
     'username' => 'asd', 
     'info' => ['first_name' => 'John', 'last_name' => 'Doe'] 
    ], 
    [ 
     'id' => 2, 
     'username' => 'martin', 
     'info' => ['first_name' => 'Martin', 'last_name' => 'Brown'] 
    ] 
]; 

我想根據first_name的值進行排序此$users陣列。

我找不到任何解決方案,也許是因爲我無法理解array_filterarray_map或我可以使用的任何其他數組函數的邏輯。

任何幫助都會對我很有幫助。

回答

3

您可以使用uasort進行此操作,並使用簡單比較名稱的回調。

function fncompare($a, $b) 
{ 
    return strcmp($a['info']['first_name'], $b['info']['first_name']); 
} 

uasort($users, "fncompare"); 

本文檔中的示例非常清晰。


既然你在PHP5.4在那裏,你可以讓這個看起來有點整潔與匿名函數,因爲你很可能不會使用這種方法排序之外:

uasort($users, function($a, $b) { 
    return strcmp($a['info']['first_name'], $b['info']['first_name']); 
}); 
+0

謝謝老兄,這真是很好的解決方案,但我只是想知道,這是什麼代碼的性能,這將是排序100有用0件物品? – 2013-03-15 10:02:05

+0

是的,它會遍歷每個項目並運行回調以進行比較。無論在排序方法上,這都會發生。 – 2013-03-15 10:09:48

+0

再次感謝你。 – 2013-03-15 10:11:05

0

試試這個:使用array_multisorthttp://www.php.net/manual/en/function.array-multisort.php

$arr = array(
    array(
     'id' => 1, 
     'username' => 'asd', 
     'info' => array('first_name' => 'John', 'last_name' => 'Doe') 
    ), 
    array(
     'id' => 2, 
     'username' => 'martin', 
     'info' => array('first_name' => 'Martin', 'last_name' => 'Brown') 
    ) 
); 


$sort = array(); 
foreach($arr as $k=>$v) { 
    $sort['first_name'][$k] = $v['info']['first_name']; 
} 

array_multisort($sort['first_name'], SORT_ASC, $arr); 

echo "<pre>"; 
print_r($arr); 
+0

這裏如果你想要,你可以添加多個字段進行排序 – 2013-03-15 09:53:16