1

Is there an efficient way to change the structure of this multidimensional array? I want to group the column values.

//$arrayBefore
[[5, 4, 10], [11, 13, 15], [32, 14, 15]];

Desired result:

//$arrayAfter
[[5, 11, 32], [4, 13, 14], [10, 15, 15]]; 
4

4 回答 4

1
<?php

$array = [[5, 4, 10], [11, 13, 15], [32, 14, 15]];

for($i = 0; $i < count($array); $i++) {
    for ($j = 0; $j < count($array[$i]); $j++) {
        $temp[$j][] = $array[$i][$j];
    }
}
print_r($temp);

输出:http ://www.phpwin.org/s/BVxAx3

于 2017-07-22T18:31:52.647 回答
0

如果不确定数组结构,也可以使用 foreach。无需任何代码修改即可在每个数组中使用超过 3 个

<?
$arr = [[5, 4, 10], [11, 13, 15], [32, 14, 15]];

foreach($arr as $value_arr){
    $i=0;
    foreach($value_arr as $value){
        if ($value){
            $arr2[$i][]=$value;
            $i++;
        }
    }

}

echo "<pre>";
print_r($arr2);
echo "</pre>";
?>

Array
(
    [0] => Array
        (
            [0] => 5
            [1] => 11
            [2] => 32
        )

    [1] => Array
        (
            [0] => 4
            [1] => 13
            [2] => 14
        )

    [2] => Array
        (
            [0] => 10
            [1] => 15
            [2] => 15
        )

)
于 2017-07-22T18:43:15.137 回答
0

我已经在 SO 上被嘲笑为此类问题推广可变参数方法,但我认为展示聪明的 php 开发人员为编码人员提供的工作是很重要的。

splat运算符)告诉我们即将到来的多维(具有潜在可变数量的子数组)数组...。然后该函数同步迭代每个单独的子数组。array_map()

在下面的代码中,我注释掉了一个静态命名参数的方法$v1$v2$v3由 使用array_map()。这将适用于 OP 的情况。

注释后的代码行是一种动态访问值而无需进行任何变量命名的方法。对于多维数组的结构改变其大小/形状的任何情况,这也将非常灵活。

PHP手册参考:

单线(需要 PHP5.6+):(带有附加示例/注意事项的演示

$m_array=[[5, 4, 10], [11, 13, 15], [32, 14, 15]];
//$new=array_map(function($v1,$v2,$v3){return [$v1,$v2,$v3];},...$m_array);
$new=array_map(function(){return func_get_args();},...$m_array);
var_export($new);

输出:

array (
  0 => 
  array (
    0 => 5,
    1 => 11,
    2 => 32,
  ),
  1 => 
  array (
    0 => 4,
    1 => 13,
    2 => 14,
  ),
  2 => 
  array (
    0 => 10,
    1 => 15,
    2 => 15,
  ),
)
于 2017-07-22T22:28:41.797 回答
0

你可以根据array_column() 来做:-

<?php

$array = [[5, 4, 10], [11, 13, 15], [32, 14, 15]];

$final_array = [array_column($array,0),array_column($array,1),array_column($array,2)];

print_r($final_array );

输出:- https://eval.in/836310

注意:- 上面的代码只适用于这个数组。

更通用并考虑到代码正在使用的所有方面foreach():-

<?php
$array = [[5, 4, 10], [11, 13, 15], [32, 14, 15]];

$final_array = array();

foreach($array as $arr){
    foreach($arr as $key=>$value){
      $final_array[$key][]=$value;
    }
}
print_r($final_array);

输出:- https://eval.in/836313

于 2017-07-22T18:29:28.743 回答