基于Json键值自动排序数组

时间:2015-04-10 21:21:56

标签: php arrays json sorting

我创建了这段代码来引用一个Json数组并构建了一个列表:

<?php

    $json = file_get_contents('events.json');

    $jsonArray = json_decode($json, true); // decode the JSON into an associative array

    foreach ($jsonArray as $value) {

        if (($value['active'] === 't') && ($value['fromDate'] >= $currentDate)) {

            echo '<p>'.$value['title'].' '.$value['fromDate'].' - '.$value['toDate'].'</p>';
        }
    }

    echo $currentDate;  
?>

但是,我无法弄清楚如何通过Json文件中的值进行组织:

[
    {

        "active": "f",
        "title": "My Third Event",
        "city": "Robert Downey Jr.",
        "ST": "Robert Downey Jr.",
        "fromDate": "01/17",
        "toDate": "01/20",
        "website": "http://google.com",
        "email": "info@test.com",
        "logo": ""
    },
    {

        "active": "t",
        "title": "My First Event",
        "city": "Robert Downey Jr.",
        "ST": "Robert Downey Jr.",
        "fromDate": "05/12",
        "toDate": "01/20",
        "website": "http://google.com",
        "email": "info@test.com",
        "logo": ""
    }
]

我想使用“fromDate”在加载时动态组织每个条目。有什么建议吗? 仅供参考 - 我已经阅读了PHP手册和其他SO条目,但我是PHP新手,我还没有完全理解这些概念。谢谢!

1 个答案:

答案 0 :(得分:1)

这应该适合你:

在这里,我只需通过比较&#34; fromDate&#34;的时间戳,就可以使用usort()对数组进行排序。

usort($jsonArray, function($a, $b) {
    if(strtotime($a["fromDate"]) == strtotime($b["fromDate"]))
        return 0;
    return strtotime($a["fromDate"]) > strtotime($b["fromDate"])? 1: -1;
});