按键数组多维排序

时间:2017-02-28 11:29:24

标签: php arrays multidimensional-array

我有这个多维数组,我想按'fecha'命令每个数组(我的意思是2017-02-20,然后是2017-02-21,然后是2017-02-22,最后是2017-02-23) 。我已经阅读了很多答案,但它们只适用于二维数组。我尝试过unsort和array_multisort,即使使用kso​​rt bue我也无法获得所需的结果。

Array
    (
        [0.10] => Array
            (
                [0] => Array
                    (
                        [fecha] => 2017-02-21
                        [tarifa] => 743.80
                        [percent] => 0.10
                    )

                [1] => Array
                    (
                        [fecha] => 2017-02-22
                        [tarifa] => 743.80
                        [percent] => 0.10
                    )

                [2] => Array
                    (
                        [fecha] => 2017-02-20
                        [tarifa] => 743.80
                        [percent] => 0
                    )

                [3] => Array
                    (
                        [fecha] => 2017-02-23
                        [tarifa] => 743.80
                        [percent] => 0
                    )

            )

        [0.15] => Array
            (
                [0] => Array
                    (
                        [fecha] => 2017-02-21
                        [tarifa] => 743.80
                        [percent] => 0.15
                    )

                [1] => Array
                    (
                        [fecha] => 2017-02-22
                        [tarifa] => 743.80
                        [percent] => 0.15
                    )

                [2] => Array
                    (
                        [fecha] => 2017-02-20
                        [tarifa] => 743.80
                        [percent] => 0
                    )

                [3] => Array
                    (
                        [fecha] => 2017-02-23
                        [tarifa] => 743.80
                        [percent] => 0
                    )

            )

    )

2 个答案:

答案 0 :(得分:2)

您可以usort使用strtotime按日期排序。

ASC按日期排序(fecha):

foreach ($yourArray as $key => $subarray) {
    usort($subarray, function($a, $b) {
            return strtotime($a['fecha']) - strtotime($b['fecha']);
        });
    $yourArray[$key] = $subarray;
 }

print_r($yourArray);

按日期排序DESC(fecha):

foreach ($yourArray as $key => $subarray) {
    usort($subarray, function($a, $b) {
            return strtotime($b['fecha']) - strtotime($a['fecha']);
        });
    $yourArray[$key] = $subarray;
 }

print_r($yourArray);

答案 1 :(得分:1)

尝试:

    foreach ($yourArray as $key => &$subarray) {
        usort($subarray, function($a, $b) {
            return $a['fecha'] <= $b['fecha'];
        });
    }
    print_r($yourArray); //now it's sorted