2016-04-01 217 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是这里