我如何使用 php 中的 usort 通过其中一个元素中的键对多维数组进行排序?

How can i sort a multi-dimensional array by it's keys in one of it's elements with usort in php?

我知道我可以像这样轻松地对多维数组进行排序:

$array = [["15", "20", "1"], ["16", "25", "2" ], ["17", "15", "1"]];

通过在 php 中使用比较函数和 usort:

function cmp($a, $b)
{
    return strcmp($a[2], $b[2]);
}
usort($array, "cmp");

但是如果我有另一个数组呢:

$array2 = [["15", "16", "17"], ["20", "25", "15"], ["1", "2", "1"]];

现在,如您所见,要比较的内容位于多维数组的最后一个元素(数组)中。我想排序后终于有这个了:

$array2sorted = [["15", "17", "16"], ["20", "15", "25"], ["1", "1", "2"]];

我怎样才能用 usort 做到这一点?

如果只想对第3个元素进行排序,可以直接排序。

$array2 = [["15", "16", "17"], ["20", "25", "15"], ["1", "2", "1"]];
sort($array2[2]);

print_r($array2);

并且会给你

Array
(
    [0] => Array
        (
            [0] => 15
            [1] => 16
            [2] => 17
        )

    [1] => Array
        (
            [0] => 20
            [1] => 25
            [2] => 15
        )

    [2] => Array
        (
            [0] => 1
            [1] => 1
            [2] => 2
        )

)

更新

受 vuryss 回答的启发,您可以通过

对所有子数组进行排序
$array2 = [["15", "16", "17"], ["20", "25", "15"], ["1", "2", "1"]];
array_walk($array2, fn(&$a) => sort($a));

您可以使用 array_walk 对数组的每个成员应用排序函数。结合 PHP 7.4 箭头函数,它看起来像这样:

array_walk($array2, fn (&$subArray) => usort($subArray, /*your logic*/));

编辑:

现在,当我更仔细地阅读问题时,这可能无法按照您的要求工作。

您可以像这样使用 array_multisort

$array2 = [["15", "16", "17"], ["20", "25", "15"], ["1", "2", "1"]];

array_multisort($array2[2], ...$array2);

这将按照仅对最后一个 sub-array 进行排序的方式对数组的每个项目进行排序。