基于子数组[0](unix)值的排序数组

时间:2019-04-29 17:26:58

标签: php arrays json

我需要一个按 Unix 时间戳值排序的数组。我尝试同时使用ksortkrsort,然后才意识到时间戳记值有时可能是相同的(并且数组中不能有重复的键)。

这是我可能会遇到的一个示例数组:

$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循环)来弄清楚-但无济于事。

感谢所有帮助。

3 个答案:

答案 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_ASCSORT_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])不变,也可以根据需要保持顺序。