【发布时间】:2021-04-30 11:04:12
【问题描述】:
我想使用 uasort 对多维数组进行排序。数组如下所示:
Array
(
[0] => Array
(
[0] => 1612134001
[1] => 1
[2] => 'a'
)
[1] => Array
(
[0] => 1612134000
[1] => 1
[2] => 'b'
)
[2] => Array
(
[0] => 1612171201
[1] => 0
[] => 'c'
)
[3] => Array
(
[0] => 1612171200
[1] => 0
[] => 'd'
)
[4] => Array
(
[0] => 1612220400
[1] => 1
[2] => 'e'
)
)
我期望的输出应该是这样的(排序时间戳 asc [0] 但如果 [1] 为 0 则将其放在上面,但仍考虑时间戳):
Array
(
[0] => Array
(
[0] => 1612171200
[1] => 0
[] => 'd'
)
[0] => Array
(
[0] => 1612171201
[1] => 0
[] => 'c'
)
[1] => Array
(
[0] => 1612134000
[1] => 1
[2] => 'b'
)
[2] => Array
(
[0] => 1612134001
[1] => 1
[2] => 'a'
)
[3] => Array
(
[0] => 1612220400
[1] => 1
[2] => 'e'
)
)
我尝试了 uasort,但它们相互覆盖。是否可以在一个 uasort 中做到这一点?我找不到任何关于它的信息。
uasort($array, function ($a, $b) {
return $a[0] - $b[0];
});
uasort($array, function ($a, $b) {
return $a[1] - $b[1];
});
【问题讨论】:
-
这能回答你的问题吗? How can I sort arrays and data in PHP?
-
在链接的副本中搜索标题为“按多个字段排序”的部分。
-
@El_Vanja 谢谢你的链接。我已经看过了,但我无法弄清楚:(
-
你尝试过写类似的东西吗?如果是这样,你能分享一下努力并解释它是如何失败的吗?您在问题中显示的代码执行两种不同的排序。
-
@El_Vanja 我试过了(顺序不正确,时间戳不正确)。如果您能给我的问题提供 if 语句,我将不胜感激。 if (($a[1] - $b[0]) > 0) { return $a[0] - $b[0]; } 返回 $a[1] - $b[1];