【问题标题】:sorting by value in a multidimensional array在多维数组中按值排序
【发布时间】:2011-12-28 19:06:29
【问题描述】:

这是我从 Google Calendar 获得的用于显示事件的多维数组。

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] 排序。如果有人能给我一些帮助,我将不胜感激。我想知道该怎么做。

【问题讨论】:

标签: php sorting multidimensional-array


【解决方案1】:
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+。其他指定比较函数的方法请参见手册中的示例。
  • 是的,在我分离函数并由usort($response['items'], 'function_name');调用它后工作,谢谢!
  • ...这改变了一切...
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2023-04-02
    • 2017-01-26
    • 2017-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多