【问题标题】:Sorting extended array of data by StartDate in ascending order in php在php中按StartDate升序对扩展数据数组进行排序
【发布时间】:2021-08-22 23:01:46
【问题描述】:

我有一个来自 Wild Apricot 会员管理系统的 php (Laravel) api 查询,它返回一个具有以下结构的事件数组(见下文)。我想按 StartDate 升序对数组进行排序,以准备完成并传递给 Laravel 选择器小部件的数组显示。想知道最好的方法是什么......任何想法和/或想法都会受到欢迎!将继续测试并进行测试,但我认为无论如何我都会将其发布在这里。 ;-P

{
  "Events": [
    {
      "Id": 4077234,
      "Url": "https://api.wildapricot.org/v2.2/accounts/ACCOUNTID/Events/4077234",
      "EventType": "Regular",
      "StartDate": "2021-12-03T19:00:00+11:00",
      "EndDate": "2021-12-05T15:30:00+11:00",
      "Location": "LOCATION1",
      "RegistrationEnabled": true,
      "RegistrationsLimit": 1,
      "PendingRegistrationsCount": 0,
      "ConfirmedRegistrationsCount": 1,
      "CheckedInAttendeesNumber": 0,
      "Tags": [],
      "AccessLevel": "Restricted",
      "StartTimeSpecified": true,
      "EndTimeSpecified": true,
      "HasEnabledRegistrationTypes": true,
      "Name": "NAME1"
    },
    {
      "Id": 4334234,
      "Url": "https://api.wildapricot.org/v2.2/accounts/ACCOUNTID/Events/4334234",
      "EventType": "Regular",
      "StartDate": "2021-11-27T00:00:00+11:00",
      "EndDate": "2021-11-28T00:00:00+11:00",
      "Location": "LOCATION2",
      "RegistrationEnabled": true,
      "RegistrationsLimit": 50,
      "PendingRegistrationsCount": 0,
      "ConfirmedRegistrationsCount": 9,
      "CheckedInAttendeesNumber": 0,
      "Tags": [],
      "AccessLevel": "Restricted",
      "StartTimeSpecified": false,
      "EndTimeSpecified": false,
      "HasEnabledRegistrationTypes": true,
      "Name": "NAME2"
    },
}

这是正在完成的查询..

        $queryParams3 = array(
            '$async' => 'false', 
            // We want the list of events
            // https://api.wildapricot.org/v2.2/accounts/ACCOUNTID/Events?$filter=(StartDate gt 2021-05-01) 
            '$filter' => "(StartDate gt 2021-05-01)"
        ); 
        $url3 = $accountUrl . '/Events/?' . http_build_query($queryParams3);
        $eventsResult = $waApiClient->makeRequest($url3); // json is returned > have been done a json_decode on it.. 
        $events =  $eventsResult['Events'];

想要这样做的原因是,它只是让用户更容易阅读当前事件(例如最接近今天的日期)与更远的事件中列出的事件......作为背景信息,这是对于我正在构建的小型短信门户。 ;-P

【问题讨论】:

标签: php arrays laravel sorting multidimensional-array


【解决方案1】:

Laravel 有一个内置的方式来使用 Collections 管理数据集。

https://laravel.com/docs/8.x/collections

// ...
$events = $eventsResult['Events'];

$sorted_events = collect($events)->sortBy('StartDate');

【讨论】:

    【解决方案2】:

    原生 PHP 解决方案使用 usort()。只有 $arr["Events"] 必须作为第一个参数传递。宇宙飞船运算符用于用户函数中的比较。

    $json = '{
      "Events": [
        {
          "Id": 4077234,
       :
    }';
    

    从 json 创建一个数组:

    $arr = json_decode($json, true);
    

    按“开始日期”ASC 排序:

    usort($arr["Events"],function($a,$b){return $a["StartDate"] <=> $b["StartDate"];});
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-10
      • 1970-01-01
      • 2016-02-01
      • 2012-04-13
      • 1970-01-01
      相关资源
      最近更新 更多