Согласно Руководству PHP, звоня array_map
с a NULL
обратный вызов заставляет это выполнять функцию "zip", создавая массив массивов параллельных элементов от данных массивов.
Например:
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))
Однако это чувствует себя очень грязным и неуклюжим.
И таким образом, я спрашиваю:
Существует ли лучший способ транспонировать 2D массив с PHP кроме пользовательской реализации?
Если вы действительно хотите избежать array_merge
, используйте array_unshift
, чтобы вместо этого добавить NULL к $ array_of_arrays
:
array_unshift($array_of_arrays, NULL);
call_user_func_array('array_map', $array_of_arrays);
Конечно, это больше не однострочный: P