首页 > 解决方案 > 按日期排序数组

问题描述

我的数组对每个字段都有一个数组(即日期、名称等)。如何按日期对数组进行排序?我应该创建另一个数组吗?我可以在这里使用排序或取消排序吗?如果是,如何?这是我的数组:

Array
(
    [date] => Array
        (
            [0] => 03/11/2019
            [1] => 03/19/2019
            [2] => 03/15/2019
            [3] => 12/15/2018
        )

    [name] => Array
        (
            [0] => Lowa
            [1] => Stephanie
            [2] => Allan
            [3] => Joffer
        )

    [number] => Array
        (
            [0] => 178989898
            [1] => 111111111
            [2] => 222222222
            [3] => 333333333
        )

    [unit] => Array
        (
            [0] => HR
            [1] => VPP
            [2] => 
            [3] => OAT
        )

    [department] => Array
        (
            [0] => Chemistry
            [1] => IT
            [2] => Lab
            [3] => Contractor
        )

) 

最后,我的第一个元素将是: 03/19/2019 Stephanie 111111111 VPP IT

标签: phparrayssorting

解决方案


首先保存数组的键 - 然后使用array_value转换为整数键,以便您可以使用...运算符。

然后你可以使用array_filterwithnull函数来重新组织你的数组。下一步将是使用array_map和取回密钥array_combine

最后一步 - 按“数据”排序usort

考虑以下示例:

$arr = ["date" => ["3", "7", "5"], "name" => ["aa", "bb", "cc"]]; // this can have a lot more sub-array inside
$keys = array_keys($arr); // extract the keys for later use
$res = array_map(null, ...array_values($arr)); // transposed the array
$res = array_map(function ($e) use ($keys) {return array_combine($keys, $e);}, $res); // return the keys to the transposed array
usort($res, function ($a, $b) {return strcmp($a['date'], $b['date']);} ); // sort all by "date"

参考:

数组键数组过滤器数组映射usort数组值

通知@MarcoS 发表关于比较日期的评论


推荐阅读