You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中如何修改二维数组元素实现数组转置?

二维数组转置实现方案

这个需求其实就是二维数组的转置(行和列互换),这里有两种实用的实现方案,根据你的PHP版本和需求选择就行:

方法一:使用PHP内置函数 array_map(简洁高效)

如果你的PHP版本在5.6及以上(支持展开运算符...),用这个方法最方便,一行核心代码就能搞定:

$arr = array(
    0 => array(0 => 'one', 1 => 'two', 2 => 'three'),
    1 => array(0 => 'sun', 1 => 'mon', 2 => 'tues'),
    2 => array(0 => 'jan', 1 => 'feb', 2 => 'march')
);

// 转置数组
$transposedArr = array_map(null, ...$arr);

// 输出结果
print_r($transposedArr);

原理说明:

当array_map的第一个参数传null时,它会把后续传入的数组的对应索引元素合并成新数组。这里用展开运算符...$arr把原数组的3个子数组拆成array_map的独立参数,刚好实现行和列的互换。如果原数组的子数组长度不一致,缺失的位置会自动用null填充。


方法二:手动循环实现(兼容性强,适合低版本PHP)

如果你的PHP版本低于5.6(不支持展开运算符),或者想更清晰地理解转置逻辑,可以用手动循环的方式:

$arr = array(
    0 => array(0 => 'one', 1 => 'two', 2 => 'three'),
    1 => array(0 => 'sun', 1 => 'mon', 2 => 'tues'),
    2 => array(0 => 'jan', 1 => 'feb', 2 => 'march')
);

$transposedArr = [];
// 遍历原数组的列索引(假设所有子数组长度一致)
foreach ($arr[0] as $colIndex => $unused) {
    $newRow = [];
    // 遍历每一行,取出当前列的元素
    foreach ($arr as $row) {
        $newRow[] = $row[$colIndex];
    }
    $transposedArr[] = $newRow;
}

// 输出结果
print_r($transposedArr);

原理说明:

  1. 先通过原数组的第一个子数组拿到所有列的索引;
  2. 针对每一列,遍历原数组的每一行,把该行对应列的元素收集起来组成新的行;
  3. 把新行添加到结果数组中,最终得到转置后的数组。

如果你的原数组子数组长度可能不一致,可以在内部循环里加个判断:$newRow[] = isset($row[$colIndex]) ? $row[$colIndex] : null;,避免出现索引不存在的报错。

内容的提问来源于stack exchange,提问作者Vikal Singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:33:25