首页 > 解决方案 > Laravel - 如何按 desc 顺序对外部 API 进行排序并选择记录集

问题描述

在我的 Laravel-8 中,我正在使用 Guzzle 获取外部 API:

我在控制器中得到了 dd($json) 的这组记录:

array:554 [▼
 0 => array:30 [▼
  "PartitionKey" => "19SB22"
  "RowKey" => "0000"
  "Timestamp" => "2021-01-22T12:30:25.4698261Z"
  "client_tracking_id" => "ddd3321"
  "current_asset_position_name" => "2, Adelaide, Australia"
  "service_tracking_id" => "19SB22"
  "this_tracking_job_id" => "0000"
  "trip_status" => "DISPATCHED"
]
1 => array:31 [▼
  "PartitionKey" => "19SB22"
  "RowKey" => "2233"
  "Timestamp" => "2021-02-23T20:51:50.3066741Z"
  "client_tracking_id" => "TRIP-20200621007"
  "current_asset_position_name" => "20, Adelaide, Australia"
  "service_tracking_id" => "19SB22"
  "this_tracking_job_id" => "19SB22"
  "trip_status" => "AROUND CUSTOMER LOCATION"
]
....

这是控制器:

public function index() {
    $client = new Client();
    $res = $client->request('GET','https://example.com/api/tracking/19SB22', [
       'query' => ['key' => 'jkkmkf']
   ])->getBody();
    $json = json_decode($res->getContents(), true);       
    return view('welcome', [
        'json' => $json,

    ]);

如何使用 Timestamp 字段对结果 $json 进行降序排序并选择第一组记录?

谢谢

标签: jsonlaravel

解决方案


使用CollectionsandCarbon将日期字符串转换为正确的时间戳。

集合是 laravel 数组扩展,它可以对集合(数组)进行函数调用。有一个sortBy()sortyByDesc()功能,这些可以使用和使用Carbon::parse(),应该能够解析你的祖鲁日期。之后,您可以使用first()来获取您的元素。

$firstElement = collect($yourData)->sortByDesc(function ($data) {
    return Carbon::parse($data['Timestamp'])->timestamp;
})->first();

推荐阅读