如何用foreach循环实现类似array_merge_recursive的按键分组合并数组
用foreach循环实现数组按键分组合并
没问题,我来帮你搞定这个需求!你想要把多个单键值对的数组合并成按相同键分组的多维数组,用foreach完全可以实现,思路其实很简单:
- 先初始化一个空的结果数组,用来存放最终分组好的数据
- 遍历你现有的每个小分组数组
- 取出每个小数组里的键和对应的值,把值追加到结果数组对应键的子数组中
具体代码实现
// 假设你的原始数组是这样的 $mrh = [ [2 => 4], [2 => 5], [3 => 7], [3 => 8], [3 => 10] ]; // 初始化结果数组 $result = []; // 遍历每个分组 foreach ($mrh as $group) { // 取出当前分组的键(因为每个group只有一个键值对,所以取第一个键) $key = array_key_first($group); // 取出对应的值 $value = $group[$key]; // 如果结果数组里还没有这个键,先初始化一个空数组 if (!isset($result[$key])) { $result[$key] = []; } // 把值追加到对应键的子数组里 $result[$key][] = $value; } // 输出结果 print_r($result);
运行结果
这段代码执行后,输出就是你期望的格式:
Array ( [2] => Array ( [0] => 4 [1] => 5 ) [3] => Array ( [0] => 7 [1] => 8 [2] => 10 ) )
补充:关于array_merge_recursive()的用法
如果你想用array_merge_recursive()来实现,其实也很简单,只需要把这些小数组作为参数传进去就行:
$result = array_merge_recursive(...$mrh); print_r($result);
这个写法会得到和foreach实现完全一样的结果,不过既然你想搞懂foreach的实现方式,上面的代码应该能帮你清晰理解整个分组合并的逻辑~
内容的提问来源于stack exchange,提问作者Onur Çiçek
相关产品推荐
相关产品推荐

