比较数组数组中的 ID,并在 PHP 中以 desc 顺序仅取一行与日期

Posted

技术标签:

【中文标题】比较数组数组中的 ID,并在 PHP 中以 desc 顺序仅取一行与日期【英文标题】:compare an ID in array of arrays and take only a single row with the date in desc order in PHP 【发布时间】:2019-06-21 14:04:44 【问题描述】:

我有一个这样的数组:

$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 的一行,其中 createdDate 是最大的,即按降序排列。

期望的输出:

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',
      ),
    );

在这种情况下,我无法弄清楚如何进行比较。 我该怎么做?

【问题讨论】:

到目前为止你有什么尝试? 你见过php中的usort函数吗?看起来你在找什么。 php.net/manual/de/function.usort.php 为了获得像 $data 这样的输出,我使用了各种数组函数,比如 array_combine 和 array_merge。但关于所需的输出,我无法弄清楚如何准确进行 【参考方案1】:

您可以按createdDate 升序排序:

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

然后你可以提取和索引UserID,它只会保留最后一个:

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

如果你想重新索引(不需要):

$result = array_values($result);

【讨论】:

哇,这太完美了:)。请推荐我一些关于高级 php 数组概念的好读物

以上是关于比较数组数组中的 ID,并在 PHP 中以 desc 顺序仅取一行与日期的主要内容,如果未能解决你的问题,请参考以下文章

你如何将数组与许多元素比较到PHP中的数据库?

比较数组中的多个对象,并在某个公共值JavaScript / Vue.js时求和值

PHP - 获取 URL 参数并在数组中重新排列

如何比较两个数组并在id匹配的情况下更改名称?

将字符串值与 PHP/Laravel 中的字符串数组进行比较?

PHP比较由CSV制作的多维数组中的键/值