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