我需要一个按 Unix 时间戳值排序的数组。我尝试同时使用ksort
和krsort
,然后才意识到时间戳记值有时可能是相同的(并且数组中不能有重复的键)。
这是我可能会遇到的一个示例数组:
$array = array(
[
"unix" => 1556547761, // notice the two duplicate unix values
"random" => 4
],
[
"unix" => 1556547761,
"random" => 2
],
[
"unix" => 1556547769,
"random" => 5
],
[
"unix" => 1556547765, // this should be in the 3rd position
"random" => 9
]
);
所以我想做的是根据每个子数组unix
的值对它们进行排序,但是我不知道该怎么做。我尝试了无数疯狂的方式(包括所有其他sort
函数和许多for
循环)来弄清楚-但无济于事。
感谢所有帮助。
答案 0 :(得分:5)
您可以使用usort根据给定的函数对数组进行排序
将功能定义为:
function cmpByUnix($a, $b) {
return $a["unix"] - $b["unix"];
}
并用于:usort($array, "cmpByUnix");
实时示例:3v4l
请注意,您也可以使用asort($array);
,但这也会比较“随机”字段并保留密钥-如果需要,请查看Mangesh答案
答案 1 :(得分:4)
array_multisort() —对多维或多维数组进行排序
array_columns() —从输入数组的单个列中返回值
您可以使用array_multisort()
和array_column()
,然后提供所需的排序顺序(SORT_ASC
或SORT_DESC
)。
array_multisort(array_column($array, "unix"), SORT_ASC, $array);
说明:
在array_multisort()
中,数组按给定的第一个数组排序。您可以看到我们正在使用array_column($array, "unix")
,这意味着第二个参数是排序顺序(升序或降序),第三个参数是原始数组。
这是array_column($array, "unix")
的结果:
Array(
[0] => 1556547761
[1] => 1556547761
[2] => 1556547765
[3] => 1556547769
)
答案 2 :(得分:1)
此函数对数组进行排序,以使数组索引与其关联的数组元素保持其相关性。主要用于排序实际元素顺序重要的关联数组。
注意:如果两个成员比较相等,则它们在排序数组中的相对顺序是不确定的。
引用:https://www.php.net/manual/en/function.asort.php
asort($array);
echo "<pre>";
print_r($array);
echo "</pre>";
它将为您提供输出
Array
(
[1] => Array
(
[unix] => 1556547761
[random] => 2
)
[0] => Array
(
[unix] => 1556547761
[random] => 4
)
[3] => Array
(
[unix] => 1556547765
[random] => 9
)
[2] => Array
(
[unix] => 1556547769
[random] => 5
)
)
您可以保持阵列键[1],[0],[3],[2])
不变,也可以根据需要保持顺序。