在多维数组中按值排序

时间:2011-12-28 19:06:30

标签: php sorting multidimensional-array

这是我从Google日历中显示的用于显示活动的多维数组。

Array
(
[items] => Array
    (
        [0] => Array
            (
                [status] => confirmed
                [summary] => Let's go swimming!
                [start] => Array
                    (
                        [dateTime] => 2011-12-30T09:00:00-05:00
                    )

                [end] => Array
                    (
                        [dateTime] => 2011-12-30T10:00:00-05:00
                    )

            )

        [1] => Array
            (
                [status] => confirmed
                [summary] => red wine
                [start] => Array
                    (
                        [dateTime] => 2011-12-28T06:00:00-05:00
                    )

                [end] => Array
                    (
                        [dateTime] => 2011-12-28T07:00:00-05:00
                    )

            )

        [2] => Array
            (
                [status] => confirmed
                [summary] => Christmas
                [start] => Array
                    (
                        [dateTime] => 2011-12-28T09:30:00-05:00
                    )

                [end] => Array
                    (
                        [dateTime] => 2011-12-28T10:30:00-05:00
                    )

            )
     )
)

我想用PHP按end [datetime]排序。如果有人能给我一些帮助,我会非常感激。我想知道该怎么做。

2 个答案:

答案 0 :(得分:9)

usort($array['items'], function($a, $b){
    if ($a['end']['dateTime'] === $b['end']['dateTime']) return 0;
    else return ($a['end']['dateTime']  > $b['end']['dateTime']) ? -1 : 1;
});

usort();

在这种特殊情况下,您可以将日期作为字符串进行比较,并根据格式获得正确的答案。在其他一些情况下,您可能需要其他方法,例如转换为unix时间戳并进行比较。

答案 1 :(得分:0)

AFAIK没有直接的方法。我通常会做类似

的事情
$items=array();
foreach($mainarray['items'] as $k=>$v) $items[$v['end']['$dateTime'."-$k"]]=$v;
ksort($items);
$mainarray['items']=array_values($items);