是否有更好的方法来转置PHP 2D数组?

时间:2010-08-11 15:27:42

标签: php arrays

根据PHP Manual,使用array_map回调调用NULL会导致它执行“zip”函数,从给定数组创建并行元素数组。< / p>

例如:

array_map(NULL,array(1,2,3),array('a','b','c'));

产量

array(array(1,'a'),array(2,'b'),array(3,'c'))

这也相当于转置数组

array(array(1,2,3),array('a','b','c'))

现在,看起来这是最接近的方式(使用内置函数),你可以转置一个数组,除了array_map获取数组列表,而不是数组数组。

在我正在研究的一些代码中,我需要转置一个数组数组,而不是数组列表,所以我做了这个解决方法:

call_user_func_array('array_map',array_merge(array(NULL),$array_of_arrays))

然而,这感觉非常肮脏和笨拙。

所以我问:
除了自定义实现之外,还有更好的方法可以使用PHP转置2D数组吗?

3 个答案:

答案 0 :(得分:4)

不。那是最优雅的。

答案 1 :(得分:2)

如果您真的想避开array_merge,请使用array_unshift将NULL添加到$array_of_arrays而不是:

array_unshift($array_of_arrays, NULL);
call_user_func_array('array_map', $array_of_arrays);

当然它不再是单行代码:P

答案 2 :(得分:1)

PHP 5.6更新:

我们可以利用PHP 5.6&#34; splat&#34;运算符使参数解包更加清晰:

array_map(null, ...$array_of_arrays);

例如:

[1] boris> $arr2d = [ [1,2,3], ['a','b','c'] ];
// array(
//   0 => array(
//     0 => 1,
//     1 => 2,
//     2 => 3
//   ),
//   1 => array(
//     0 => 'a',
//     1 => 'b',
//     2 => 'c'
//   )
// )
[2] boris> array_map(null, ...$arr2d);
// array(
//   0 => array(
//     0 => 1,
//     1 => 'a'
//   ),
//   1 => array(
//     0 => 2,
//     1 => 'b'
//   ),
//   2 => array(
//     0 => 3,
//     1 => 'c'
//   )
// )