PHP单次for循环合并不同长度数组 短数组值循环填充实现
PHP 不同长度二维数组合并(短数组元素循环复用)实现方案
核心逻辑
- 取所有待合并数组的最大长度作为循环总次数,保证最长数组的元素全部被遍历
- 遍历过程中,对每个数组单独计算有效下标:用当前循环索引对该数组长度取模,索引未超出数组长度时取模结果等于索引本身,超出长度时会自动从0开始循环读取已有元素,从根源上避免下标越界产生的空值
- 单次循环即可完成合并,无额外嵌套遍历开销
完整实现代码
<?php // 此处替换为你实际的$array1、$array2、$array3 $array1 = [ ['title' => 'a1-0'], ['title' => 'a1-1'], ['title' => 'a1-2'] ]; $array2 = [ ['title' => 'a2-0'] ]; $array3 = [ ['title' => 'a3-0'], ['title' => 'a3-1'] ]; // 提前计算各数组长度,避免循环中重复count调用 $len1 = count($array1); $len2 = count($array2); $len3 = count($array3); $maxLoop = max($len1, $len2, $len3); $mergedResult = []; for ($i = 0; $i < $maxLoop; $i++) { $mergedResult[] = [ 'array1' => $array1[$i % $len1]['title'], 'array2' => $array2[$i % $len2]['title'], 'array3' => $array3[$i % $len3]['title'] ]; } // 输出验证结果 print_r($mergedResult); ?>
运行结果说明
以上示例执行后输出结果完全匹配预期规则:
- 索引0:三个数组都取对应下标0的元素值
- 索引1:
$array2长度为1,索引1越界,自动复用$array2[0]的title值;$array3索引1未越界,取自身对应值 - 索引2:
$array2长度为1,索引2越界,复用$array2[0]的title值;$array3长度为2,索引2越界,自动复用$array3[0]的title值
Array ( [0] => Array ( [array1] => a1-0 [array2] => a2-0 [array3] => a3-0 ) [1] => Array ( [array1] => a1-1 [array2] => a2-0 [array3] => a3-1 ) [2] => Array ( [array1] => a1-2 [array2] => a2-0 [array3] => a3-0 ) )
扩展说明
- 如果需要保留数组完整子元素结构,不需要单独读取
title键,直接将赋值语句改为'array1' => $array1[$i % $len1]即可 - 该逻辑支持任意数量的数组合并,只需要新增对应数组的长度计算、取模取值步骤即可,核心循环逻辑不需要改动
- 提前计算数组长度、单次循环遍历的写法可以避免重复计算开销,性能最优
内容的提问来源于stack exchange,提问作者Bien Albert
相关产品推荐
相关产品推荐

