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);
原理说明:
- 先通过原数组的第一个子数组拿到所有列的索引;
- 针对每一列,遍历原数组的每一行,把该行对应列的元素收集起来组成新的行;
- 把新行添加到结果数组中,最终得到转置后的数组。
如果你的原数组子数组长度可能不一致,可以在内部循环里加个判断:$newRow[] = isset($row[$colIndex]) ? $row[$colIndex] : null;,避免出现索引不存在的报错。
内容的提问来源于stack exchange,提问作者Vikal Singh
相关产品推荐
相关产品推荐

