我有这个多维数组
[
"/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
可能做到这一点吗?
如何使用usort
函数按uri
排序?
当您循环通过第一个级别时,修改子数组"通过引用";具有CCD_ 6符号。
代码:(演示)
foreach ($myArray as &$subarray) {
usort($subarray, fn($a, $b) => $a['uri'] <=> $b['uri']);
}
如果您不想使用&
,那么您可以在迭代时直接按原始数组中的键名覆盖元素。(演示)
foreach ($myArray as $key => $subarray) {
usort($myArray[$key], fn($a, $b) => $a['uri'] <=> $b['uri']);
}
或者,您可以将array_multisort()
与array_column()
:组合使用
代码:(演示)
foreach ($myArray as &$subarray) {
array_multisort(array_column($subarray, 'uri'), $subarray);
}
同样,您也可以使用它执行迭代覆盖。