本文介绍如何在 php 中对多维数组按 `devicemacaddress` 键去重,并智能合并重复设备的字段:保留每个字段的最新非空值(以时间戳递增为序),最终得到唯一设备及其最完整数据。
在物联网或传感器数据聚合场景中,常会收到同一设备(由 deviceMacAddress 标识)在不同时间点发送的不完整数据包——某些字段为空(如 '' 或 null),而其他字段有效。此时,简单使用 array_unique() 按键去重无法满足需求;我们需要的是基于主键的增量合并(upsert)逻辑:遍历数组,对每个设备地址维护一个“当前最优记录”,当遇到同设备新条目时,仅用其非空值覆盖旧值(而非全量替换),从而逐步构建出该设备最完整的状态快照。
核心思路是:利用 deviceMacAddress 作为关联键,构建临时关联数组 $merged,再通过两层循环实现“懒覆盖”:
以下是推荐实现(兼容 PHP 7.0+):
$value) {
if ($value !== '' && $value !== null && $value !== false) {
$merged[$mac][$key] = $value;
}
}
}
}
// 重置数组索引,返回纯数字索引的一维数组
$result = array_values($merged);
print_r($result);✅ 关键优势说明:

⚠️ 注意事项:
最终,$result 即为去重且字段最完整的设备数组,完全符合预期输出结构。