【发布时间】:2021-10-18 14:59:04
【问题描述】:
我有一个如下所示的数组。我需要对 2 键上的每个数组进行排序。
myarray [
[2020] = [0 => 123, 1 => 234, 2 => 45],
[2021] = [0 => 123, 1 => 34, 2 => 345],
[2019] = [0 => 123, 1 => 134, 2 => 645]
]
所以结果是
[2020] =
45
123
234
[2021] =
34
123
345
[2019] =
123
134
645]
我试过了
array_multisort( array_column($myarray, $myarray[2]), SORT_ASC, $myarray );
和
usort($myarray, array($myarray[2], 'sort_function'));
function sort_function($a, $b)
{
if ($a == $b) {
return 0;
}
return ($a < $b) ? -1 : 1;
}
以上都不起作用。有人请指出我的错误或正确的方法吗?
下面是对问题的更好解释:
myarray [
[2020] = [0 => 123, 1 => 234, 2 => 357],
[2020] = [0 => 123, 1 => 34, 2 => 157],
[2020] = [0 => 123, 1 => 134, 2 => 257]
]
[2020] =
157
257
357
【问题讨论】:
-
sort_function应该是usort的第一个参数,而不是array()的参数。 -
array_column的第二个参数应该是2,而不是$myarray[2]。您已经在第一个参数中告诉它从哪个数组获取列。 -
您的结果如何“按 2 键排序”?您正在对每个数组进行数字排序,而不是基于特定的键。
-
usort 手册显示数组是第一个参数。我不明白吗?我尝试将 myarray[2] 更改为 2 但它导致最终数组只是一个元素。该数组是一个值列表,其中 2 键保存所有值的总和。我现在看到我的示例结构不合理,并且已将其更改为仅显示一年的结果。对于造成的混乱,我深表歉意。
-
抱歉,我弄反了。但是
sort_function应该是usort()的参数,而不是array()。
标签: php sorting multidimensional-array numeric