如何在循环中合并数组并将属性整合到同一对象中?
解决数组按radius合并属性的问题
你原来的array_merge写法只是把所有数组元素平铺成一维数组,没有按radius值聚合不同ID的属性。要实现将相同radius的对象整合到一起,我们可以通过以radius为键临时存储聚合结果的方式来处理,具体代码如下:
// 你的原始数据 $data = [ [ ["radius" => 0, "0004718100" => 17.42], ["radius" => 1, "0004718100" => 21.15], ], [ ["radius" => 0, "0014084415" => 21.39], ["radius" => 1, "0014084415" => 22.74], ] ]; $merged = []; // 遍历每个ID对应的分组 foreach ($data as $group) { // 处理分组内的每个radius条目 foreach ($group as $item) { $radius = $item['radius']; // 如果该radius尚未初始化,先创建空数组 if (!isset($merged[$radius])) { $merged[$radius] = []; } // 合并当前条目的属性到对应radius的集合中 $merged[$radius] = array_merge($merged[$radius], $item); } } // 转换为目标格式:关联数组转索引数组,再包裹一层数组 $result = [array_values($merged)]; // 输出结果 print_r($result);
代码逻辑解释:
- 首先用
$merged数组以radius值为键,临时存储每个radius对应的合并后属性; - 遍历原始数据的每个分组,再遍历分组内的每个对象,将对象的属性合并到对应
radius的数组中(因为每个对象的ID键唯一,不会出现覆盖问题); - 最后用
array_values()把关联数组转成索引数组,再包裹一层数组就得到你想要的结构了。
执行这段代码后,输出结果就是:
Array ( [0] => Array ( [0] => Array ( [radius] => 0 [0004718100] => 17.42 [0014084415] => 21.39 ) [1] => Array ( [radius] => 1 [0004718100] => 21.15 [0014084415] => 22.74 ) ) )
内容的提问来源于stack exchange,提问作者Grasper
相关产品推荐
相关产品推荐

