You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP遍历多维数组按id_property分组取date_max最大值的实现问题

问题原因

你写的代码有几个核心逻辑错误:

  • 双重循环逻辑冗余,同一个id_property的条目会两两比对多次,只要当前条目比任意一个同id条目date_max大就会插入结果数组,最终同一个id_property会返回多条重复数据,不符合「每个id仅返回一条最大日期条目」的要求
  • 插入结果时你把三个字段组装成了索引数组,没有保留原数组的关联键结构,和需求返回原条目的逻辑不符
  • 没有做最大值覆盖判断,无法保证最终保留的是同id下date_max最大的条目
正确实现

只需要单次遍历即可完成需求,时间复杂度O(n),比双重循环的O(n²)效率更高:

$temp = [];
foreach ($sql as $item) {
    $id = $item['id_property'];
    // 临时数组中不存在该id,或者当前条目日期比已存的更大,就覆盖写入
    if (!isset($temp[$id]) || $item['date_max'] > $temp[$id]['date_max']) {
        $temp[$id] = $item;
    }
}
// 取出临时数组的值就是最终结果,重置为0、1、2开头的索引数组
$result = array_values($temp);

注:你使用的Y-m-d格式日期字符串可以直接用大小于号比对,字典序和时间顺序完全一致,不需要额外转时间戳。

内容的提问来源于stack exchange,提问作者test_user

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 09:39:02