【发布时间】:2016-07-13 11:37:07
【问题描述】:
我有这个多维数组
[
"/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 排序?
【问题讨论】:
-
您要对每个子数组进行排序还是对整个数组进行排序,如果需要移动子数组? (只需通过引用通过您的子数组:
foreach ($myArray as $key)->foreach ($myArray as &$key)) -
另请注意,如果您的
uri键是字母数字,$a['uri'] - $b['uri']不起作用。请改用strcmp。 -
@Rizier123 要在
foreach中使用usort,他需要使用参考foreach ($myArray as &$key)。默认情况下,$key是一个副本。没有必要对副本进行排序,因为它将在foreach之后被销毁 -
好的,谢谢大家,我尽快试试这个
标签: php loops sorting multidimensional-array