要实现交叉合并[a0,b0,a1,b1,…],需手动遍历:取两数组最大长度为上限,循环中依次推入存在元素;示例中$a=[1,3,5]、$b=[2,4,6,8],结果为[1,2,3,4,5,6,8]。

用 array_merge() 或加号(+)直接合并,得到的是“先放完第一个、再放第二个”的顺序,不是交替。要实现 [a0, b0, a1, b1, a2, b2...] 这样的交叉合并,得手动遍历或借助函数组合。
方法一:用 for 循环逐个取值(推荐,清晰可控)
假设两个数组长度相等或不等,都可安全处理:
- 取两者最大长度(
max(count($a), count($b)))作为循环上限 - 每次循环中,先推入 $a 的当前索引元素(如果存在),再推入 $b 的当前索引元素(如果存在)
- 用
isset()或array_key_exists()判断键是否存在,避免 Notice
示例代码:
array_map
-
array_map(null, $a, $b)生成[[1,2], [3,4], [5,6]] - 用
array_merge(...$mapped)摊平(PHP 5.6+ 支持展开运算符) - 注意:如果数组不等长,
array_map(null, ...)会在短数组处补null,需额外过滤
示例:
$a = [1, 3, 5]; $b = [2, 4, 6]; $mapped = array_map(null, $a, $b); // [[1,2], [3,4], [5,6]] $result = array_merge(...$mapped); // [1,2,3,4,5,6]
方法三:封装成可复用函数(兼顾健壮性与简洁)
把逻辑收进函数,支持任意数量数组交替合并(不止两个),也自动跳过缺失值:
function interleave_arrays(...$arrays) {
$result = [];
$len = max(array_map('count', $arrays));
for ($i = 0; $i
<p>不复杂但容易忽略边界情况,建议优先用方法一或封装后的函数,逻辑直白、易调试、兼容性强。</p>
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











