我有这个多维数组
[
"/api/dns" => [
0 => [
"method" => "GET",
"uri" => "foo0"
],
1 => [
"method" => "GET",
"uri" => "foo1"
],
2 => [
"method" => "GET",
"uri" => "foo2"
]
],
"/api/servers" => [
0 => [
"method" => "GET",
"uri" => "foo0"
],
1 => [
"method" => "GET",
"uri" => "foo1"
],
2 => [
"method" => "GET",
"uri" => "foo2"
]
]
];
我正在尝试按uri
排序。
我尝试使用usort
这样:
usort($myArray, function ($a, $b) {
return $a['uri'] - $b['uri'];
});
但这不起作用,因为排序没有在正确的数组上完成,所以我得到了错误:
未定义的索引:uri
我尝试在没有结果的foreach中添加此函数。我不知道为什么这不起作用,因为排序是在正确的数组上完成的。
foreach ($myArray as $key) {
usort($key, function ($a, $b) {
return $a['uri'] - $b['uri'];
});
}
这可以用usort
吗?
如何使用uri
功能按usort
排序?
答案 0 :(得分:1)
当您遍历第一级时,修改子阵列"参考"使用&
符号。
代码:(演示:https://3v4l.org/DthZW)
foreach($myArray as &$subarray){ // modify by reference
usort($subarray,function($a,$b){
return $a['uri']<=>$b['uri']; // use spaceship operator for ASC sorting
});
}
var_export($myArray);
如果您不想使用&
,则可以在迭代时覆盖。
foreach ($myArray as $key=>$subarray){
usort($subarray,function($a,$b){
return $a['uri']<=>$b['uri'];
});
$myArray[$key]=$subarray; // overwrite
}
或者,您可以将array_multisort()
与array_column()
合并:
代码:(演示:https://3v4l.org/sOEqZ)
foreach($myArray as &$subarray){
array_multisort(array_column($subarray,'uri'),$subarray);
}
var_export($myArray);
同样,您也可以使用此方法执行迭代覆盖。