Php 如何在多维数组中转置和内爆子数组数据以创建平面输出数组?

Php 如何在多维数组中转置和内爆子数组数据以创建平面输出数组?,php,arrays,multidimensional-array,transpose,implode,Php,Arrays,Multidimensional Array,Transpose,Implode,我没有指定数量的子阵列,但我的数据结构可以如下所示: array(("john","alex","tyler"),("1","2","3"),("brown","yellow","green")); 上面的示例有3个子阵列,但问题是这个数字可以更改 在本例中,作为最终输出,我需要一个包含3个字符串的数组 array("john,1,brown","alex,2,yellow","tyler,3,green"); 我尝试使用函数编写此函数,但找不到解决方案。使用call\u user\u fu

我没有指定数量的子阵列,但我的数据结构可以如下所示:

array(("john","alex","tyler"),("1","2","3"),("brown","yellow","green"));
上面的示例有3个子阵列,但问题是这个数字可以更改

在本例中,作为最终输出,我需要一个包含3个字符串的数组

array("john,1,brown","alex,2,yellow","tyler,3,green");
我尝试使用函数编写此函数,但找不到解决方案。

使用call\u user\u func\u array、array\u map和array\u merge函数的解决方案:

$arr = [["john","alex","tyler"],["1","2","3"],["brown","yellow","green"]];

$groups = call_user_func_array("array_map", array_merge([null], $arr));
$result = array_map(function ($v) {
    return implode(",", $v);
}, $groups);

print_r($result);
输出:

Array
(
    [0] => john,1,brown
    [1] => alex,2,yellow
    [2] => tyler,3,green
)
使用call_user_func_array、array_map和array_merge函数的解决方案:

$arr = [["john","alex","tyler"],["1","2","3"],["brown","yellow","green"]];

$groups = call_user_func_array("array_map", array_merge([null], $arr));
$result = array_map(function ($v) {
    return implode(",", $v);
}, $groups);

print_r($result);
输出:

Array
(
    [0] => john,1,brown
    [1] => alex,2,yellow
    [2] => tyler,3,green
)

这里我们通过将数组行转换为列来更改数组的值。然后用逗号内插每个数组,例如:数组[1][0]将变成数组[0][1]等等


这里我们通过将数组行转换为列来更改数组的值。然后用逗号内插每个数组,例如:数组[1][0]将变成数组[0][1]等等

使用PHP5.6的更简单方法+

…$array获取嵌套数组并将其解压,就像调用

array_map(/* anonymomous function */, $array[0], $array[1], ... $array[n])
可以采用多个数组,并将给定的可调用项应用于每一轮

而匿名函数的作用大致相反

function(...$elements) { return implode(",", $elements); }
…$elements接受任意数量的参数,并将其转换为一个数组,然后将其合并为一个字符串。

使用PHP5.6的更简单方法+

…$array获取嵌套数组并将其解压,就像调用

array_map(/* anonymomous function */, $array[0], $array[1], ... $array[n])
可以采用多个数组,并将给定的可调用项应用于每一轮

而匿名函数的作用大致相反

function(...$elements) { return implode(",", $elements); }

…$elements接受任意数量的参数,并将其转换为一个数组,然后将其合并为一个字符串。

@ultradurable3这也可以在array\u列中完成。在这里,您不必担心子数组的数量,请尝试以下操作:

<?php
$array =  array(array("john","alex","tyler"), array("1","2","3"), array("brown","yellow","green"));
$finalArr = array(implode(",", array_column($array, 0)), implode(",", array_column($array, 1)), implode(",", array_column($array, 2)));
echo "<pre>";
print_r($finalArr);

@ultradurable3这也可以在array_列中完成。在这里,您不必担心子数组的数量,请尝试以下操作:

<?php
$array =  array(array("john","alex","tyler"), array("1","2","3"), array("brown","yellow","green"));
$finalArr = array(implode(",", array_column($array, 0)), implode(",", array_column($array, 1)), implode(",", array_column($array, 2)));
echo "<pre>";
print_r($finalArr);

子数组的长度是否总是固定的?意味着子数组没有任何限制,但它总是有3个元素?子数组的长度总是固定的吗?这意味着子数组没有任何限制,但它总是有3个元素?我喜欢这个简洁的答案-它是直接的,并且有效地使用了splat运算符。注意,从PHP7.4开始,可以通过箭头函数进一步简化语法。array_mapfn…$elements=>内爆,,$elements,…$array演示:我喜欢这个简洁的答案-它是直接的,并且有效地使用了splat操作符。注意,从PHP7.4开始,可以通过箭头函数进一步简化语法。数组_mapfn…$elements=>内爆,,$elements,…$array演示: