在多维数组中按值排序

3

这是我从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按照[datetime]结束时间排序。如果有人能给我一些帮助,我会非常感激。我想知道如何做到这一点。


1
重复的内容https://dev59.com/cHE85IYBdhLWcg3wmEtW? - liquorvicar
2个回答

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时间戳并进行比较。


我使用了一个匿名函数,需要php 5.3+。请参考手册中的示例以了解其他指定比较函数的方法。 - goat
没错,我把函数分离出来并通过 usort($response['items'], 'function_name'); 调用后就可以工作了,谢谢! - Ryan Koehler
...好的,这改变了一切... - d-_-b

0

据我所知,没有直接的方法来做到这一点。通常我会做类似于以下的操作

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接