сравнить идентификатор в массиве массивов и взять только одну строку с датой в порядке убывания в PHP - PullRequest
1 голос
/ 21 июня 2019

У меня есть такой массив:

$data = array (
  0 => 
  array (
    'UserID' => '1',
    'ShipPinCode' => '411008',
    'createdDate' => '2011-10-04 01:16:54.723',
    'Amount' => '1000.00',
  ),
  1 => 
  array (
    'UserID' => '1',
    'ShipPinCode' => '411008',
    'createdDate' => '2011-10-04 01:24:24.243',
    'Amount' => '1000.00',
  ),
  2 => 
  array (
    'UserID' => '102818',
    'ShipPinCode' => '500072',
    'createdDate' => '2011-11-29 12:17:43.880',
    'Amount' => '2000.00',
  ),
  3 => 
  array (
    'UserID' => '100001',
    'ShipPinCode' => '500072',
    'createdDate' => '2011-11-26 11:49:17.760',
    'Amount' => '2000.00',
  ),
);

Я хочу отсортировать его таким образом, чтобы для дублированных записей UserID конечный вывод содержал только одну строку для этого UserID, где createDate является наибольшим, т.е. в порядке убывания.

Желаемый вывод:

array (
      0 => 
      array (
        'UserID' => '1',
        'ShipPinCode' => '411008',
        'createdDate' => '2011-10-04 01:24:24.243', //only took one row of UserID 1 where the createdDate is the largest.
        'Amount' => '1000.00',
      ),
      1 => 
      array (
        'UserID' => '102818',
        'ShipPinCode' => '500072',
        'createdDate' => '2011-11-29 12:17:43.880',
        'Amount' => '2000.00',
      ),
      2 => 
      array (
        'UserID' => '100001',
        'ShipPinCode' => '500072',
        'createdDate' => '2011-11-26 11:49:17.760',
        'Amount' => '2000.00',
      ),
    );

Я не могу понять, как сделать сравнение в таком случае. Как мне это сделать?

1 Ответ

2 голосов
/ 21 июня 2019

Вы можете отсортировать по возрастанию по createdDate:

array_multisort(array_column($data, 'createdDate'), SORT_ASC, $data);

Затем вы можете извлечь и индексировать на UserID, который сохранит только последний:

$result = array_column($data, null, 'UserID');

Если вы хотите переиндексировать (не нужно):

$result = array_values($result);
...