php按特定键排序关联数组

时间:2016-04-01 09:04:09

标签: php arrays sorting

问题:我有一个关联的多维数组,每个键都有一个数组。它看起来像这样:

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;
}

但是这个特定的代码会重写所有的关键数字。有没有其他方法可以排序而不改变任何东西?

3 个答案:

答案 0 :(得分:1)

最好的方法是使用uasort()函数。

试试这个:

inserted

答案 1 :(得分: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;
}

它应该只排序'键。数组(包含数组键)。

然后在$ out

中重建已排序的$数组

答案 2 :(得分:0)

您可以试试这段简短而又甜蜜的代码

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

Working Demo就在这里