2016-04-01 216 views
0

問題:我有一個關聯多維數組,每個鍵都有一個數組。它看起來像這樣:按特定鍵排序關聯數組

array(3){ 
    [1]=> 
      "id"=>1 
      "name"=>"Test #1" 
      "listorder"=>1 
    [6]=> 
      "id"=>6 
      "name"=>"Test #1" 
      "listorder"=>3 
    [2]=> 
      "id"=>2 
      "name"=>"Test #2" 
      "listorder"=>2 
} 

我需要在不改變任何關鍵數字的排序這個數組由每個陣列的listorder。如何才能做到這一點?

我目前正在嘗試這個代碼,我從一個單獨的堆棧溢出問題。

function sort_array(){ 
    foreach($array as $key => $row){ 
     $listorder[$row["id"]] = $row["listorder"]; 
    } 
    array_multisort($listorder, SORT_ASC, $array); 
    return $array; 
} 

但是,這個特定的代碼重寫了所有的鍵號。有沒有改變任何東西的另一種排序方式?

+0

你檢查'usort()'? –

+0

'usort($ myArray,function($ a,$ b){return $ a ['listorder'] - $ b ['listorder'];}' –

回答

1

最好的方式排序$陣列是使用uasort()函數。

試試這個:

$array = array(
    1 => array(
     "id"=>1, 
     "name"=>"Test #1", 
     "listorder"=>1 
    ), 
    6 => array(
     "id"=>6, 
     "name"=>"Test #1", 
     "listorder"=>3 
    ), 
    2 => array(
     "id"=>2, 
     "name"=>"Test #2", 
     "listorder"=>2 
    ) 
); 


function sort_count($a, $b) { 
    if ($a['listorder'] === $b['listorder']) { 
     return 0; 
    } else { 
     return ($a['listorder'] > $b['listorder'] ? 1:-1); 
    } 
} 

$sorted_array = uasort($array, 'sort_count'); 

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

謝謝你這個工作 – ZeroByter

+0

不客氣,芽。 :) –

0

,你可以通過創建一個新的數組,array_keys排序:

function sort_array($array) 
{ 
    $keys = array_keys($array); 

    $out = array(); 
    $listorder = array(); 

    foreach($array as $key => $row) 
    { 
     $listorder[$row["id"]] = $row["listorder"]; 
    } 


    array_multisort($listorder, SORT_ASC, $keys); 
    foreach($keys as $k) 
    { 
     $out[$k] = $array[$k]; 
    } 


    return $out; 
} 

應該的「鑰匙」陣列(包含數組的鍵)只進行排序。

然後你重建$出

0

你可以試試這個簡短而親切的一段代碼

uasort($data,function($a,$b){ 
    return strcmp($a["listorder"],$b["listorder"]); 
}); 
print_r($data); 

Working Demo是這裏