推荐用array_map(null, $a, $b)将两个一维数组按索引拉链式合并为二维数组;长度不等时自动截断,简洁高效。

<p>直接用 <strong>array_map()</strong> 配合 <strong>null</strong>,就能把两个一维数组按索引“拉链式”合并成二维数组,最简洁也最常用。</p> <H3>方法一:用 array_map(null, $a, $b) —— 推荐</H3> <p>这是最干净的方式,适合两个数组长度一致或你想自动截断到较短者:</p> <font color="gray"> <pre class="brush:php;toolbar:false;">$arr1 = ['a', 'b', 'c']; $arr2 = [1, 2, 3]; $result = array_map(null, $arr1, $arr2); // 输出:[['a', 1], ['b', 2], ['c', 3]]
说明:
• null 表示不调用任何函数,只把对应位置的元素打包成子数组;
• 如果数组长度不同,多出的元素会被忽略(如 $arr1 有4个,$arr2 只有2个,则只合并前2组)。
方法二:手动循环合并 —— 灵活可控
需要保留所有元素、处理长度不等、或想自定义键名时用这个:
$result = [];
$maxLength = max(count($arr1), count($arr2));
for ($i = 0; $i < $maxLength; $i++) {
$row = [];
if (isset($arr1[$i])) $row[] = $arr1[$i];
if (isset($arr2[$i])) $row[] = $arr2[$i];
$result[] = $row;
}
优点:
• 不丢数据,长数组的剩余项也会被加入;
• 可轻松改成关联形式,比如 ['name' => $arr1[$i], 'age' => $arr2[$i]]。
方法三:用 array_combine() + array_values() —— 仅限键值映射
如果想让第一个数组当键、第二个当值,再转成二维(即每行是 [key => value]),可这样:
立即学习“PHP免费学习笔记(深入)”;
$pairs = array_combine($arr1, $arr2); // 得到 ['a'=>1, 'b'=>2, ...]
$result = [];
foreach ($pairs as $k => $v) {
$result[] = [$k, $v]; // 或 ['key'=>$k, 'val'=>$v]
}
注意:
• 要求 $arr1 中元素**不能重复且必须是合法键名**(字符串/整数);
• 两数组长度必须严格相等,否则 array_combine() 会报错。
不复杂但容易忽略:合并前建议先用 array_values() 重置索引,避免因原数组键不连续导致对不齐。



















