Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何以列为行重新构造多维数组?_Php_Arrays_Multidimensional Array_Grouping_Array Column - Fatal编程技术网

Php 如何以列为行重新构造多维数组?

Php 如何以列为行重新构造多维数组?,php,arrays,multidimensional-array,grouping,array-column,Php,Arrays,Multidimensional Array,Grouping,Array Column,有没有一种有效的方法来更改这个多维数组的结构?我想对列值进行分组 //$arrayBefore [[5, 4, 10], [11, 13, 15], [32, 14, 15]]; 预期结果: //$arrayAfter [[5, 11, 32], [4, 13, 14], [10, 15, 15]]; 您可以根据以下内容进行操作:- 输出:-如果不确定数组结构,也可以使用foreach。在没有任何代码修改的情况下,在每个阵列中可以工作3次以上 <? $arr = [[5, 4, 10

有没有一种有效的方法来更改这个多维数组的结构?我想对列值进行分组

//$arrayBefore
[[5, 4, 10], [11, 13, 15], [32, 14, 15]];
预期结果:

//$arrayAfter
[[5, 11, 32], [4, 13, 14], [10, 15, 15]]; 
您可以根据以下内容进行操作:-


输出:-

如果不确定数组结构,也可以使用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
        )

)

排列
(
[0]=>阵列
(
[0] => 5
[1] => 11
[2] => 32
)
[1] =>阵列
(
[0] => 4
[1] => 13
[2] => 14
)
[2] =>阵列
(
[0] => 10
[1] => 15
[2] => 15
)
)

我已经被嘲笑了,因为我在这类问题上推广了一种可变的方法,但我认为展示聪明的php开发人员为程序员提供了什么是很重要的

(splat操作符)告诉
array\u map()
一个多维(子数组数量可能可变)数组即将出现。然后,该函数同步迭代每个单独的子数组

在下面的代码中,我注释了一个方法,该方法静态地命名了
数组映射()使用的参数
$v1
$v2
$v3
。这将适用于OP的案例

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

PHP手册参考:

一个衬里(需要PHP5.6+):()

输出:


你试过什么?根据你的要求,我看不到任何代码使用循环和数组推送,实际上我没有任何解决方案。我知道如何在一次性操作中使用它,但当我想将其作为脚本的结果使用时(当输入可以包含更多数组或元素时)。我甚至不知道从哪里开始,我不能使用for循环,因为我不知道这个循环中会有多少个数组,也不知道如何以我喜欢的方式使用foreach。使用foreach会更好吗?不,现在我知道我以前在foreach中做错了什么。。谢谢你的解决方案!稍长但更灵活。@m就像我添加了更通用的
foreach()
解决方案。你可以检查一下。看起来不错:)foreach对我来说有点困惑,但在分析了你的解决方案后,我终于弄明白了。谢谢如果
$new=array\u-map('func\u-get\u-args',…$m\u-array),那就太酷了
的工作方式相同,但不能动态调用
func\u get\u args()
,因此会生成错误结果和警告。
<?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);
<?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);
<?
$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
        )

)
$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,
  ),
)