如何在多维数组中使用usort


How to use usort inside a multidimensional array?

我有这个多维数组

[
    "/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);
}

同样,您也可以使用它执行迭代覆盖。