问题:我有一个关联的多维数组,每个键都有一个数组。它看起来像这样:
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 :(得分: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就在这里