2010-10-26 74 views
20

排序多維數組我有一個數組:通過特定的按鍵

Array (
    [0] => stdClass Object (
     [user_id] => 1 
     [ID] => 1 
     [user_login] => admin 
     [display_name] => admin 
     [user_email] => [email protected] 
     [meta_value] => a:1:{s:13:\"administrator\";s:1:\"1\";} 
    ) 
    [1] => stdClass Object (
     [user_id] => 4 
     [ID] => 4 
     [user_login] => ungtinflytande 
     [display_name] => ungtinflytande 
     [user_email] => [email protected] 
     [meta_value] => a:1:{s:13:\"administrator\";s:1:\"1\";} 
    ) 
    [2] => stdClass Object (
     [user_id] => 5 
     [ID] => 5 
     [user_login] => inflytandepilot 
     [display_name] => inflytandepilot 
     [user_email] => [email protected] 
     [meta_value] => a:1:{s:6:\"author\";s:1:\"1\";} 
    ) 
    [3] => stdClass Object (
     [user_id] => 11 
     [ID] => 11 
     [user_login] => matsbohman 
     [display_name] => matsbohman 
     [user_email] => [email protected] 
     [meta_value] => a:1:{s:6:\"editor\";s:1:\"1\";} 
    ) 
    [4] => stdClass Object (
     [user_id] => 12 
     [ID] => 12 
     [user_login] => klarakviberg 
     [display_name] => klarakviberg 
     [user_email] => [email protected] 
     [meta_value] => a:1:{s:13:\"administrator\";s:1:\"1\";} 
    ) 
) 

...我用display_name鍵想排序。我目前這樣打印:

foreach ($blogusers as $bloguser) { 
    ... 
} 

我該怎麼做?

回答

34

你會使用usort() - http://php.net/usort

我的建議是:

function cmp($a, $b) 
    { 
     return strcmp($a->display_name, $b->display_name); 
    } 

    usort($blogusers, "cmp"); 

    foreach ($blogusers as $bloguser) 
    { 
     ... 
+0

usort()是去確認的方式。如果有人想要對浮點數進行排序,strcmp是否是正確的函數?我的猜測將是單獨的比較函數取決於類型可能是一個好主意...... – jsh 2013-11-14 15:56:57

11

見usort:http://php.net/manual/en/function.usort.php

usort($array, "my_cmp"); 

function my_cmp($a, $b) { 
    if ($a->display_name == $b->display_name) { 
    return 0; 
    } 
    return ($a->display_name < $b->display_name) ? -1 : 1; 
} 
1

你的陣列看起來像一個數據庫查詢的結果。如果是這種情況,讓數據庫執行排序:只需將ORDER BY display_name附加到查詢中。

6

我在https://joshtronic.com/2013/09/23/sorting-associative-array-specific-key/

function sortBy($field, &$array, $direction = 'asc') 
{ 
    usort($array, create_function('$a, $b', ' 
     $a = $a["' . $field . '"]; 
     $b = $b["' . $field . '"]; 

     if ($a == $b) 
     { 
      return 0; 
     } 

     return ($a ' . ($direction == 'desc' ? '>' : '<') .' $b) ? -1 : 1; 
    ')); 

    return true; 
} 

找到答案,現在調用由特定的數組鍵此功能。

$newArray = sortBy('display_name', $blogusers); 

如果排序在遞增/遞減只需添加一個參數,

sortBy('display_name', $blogusers, 'desc');