Transposing Multidimensional Arrays in PHP: Flipping and Generalizing
Transposing a multidimensional array is an operation that flips rows and columns, effectively rotating the array 90 degrees. To address this common programming task, let's explore a PHP function that accomplishes this for both two-dimensional and higher-dimensional arrays.
Transposing Two-Dimensional Arrays
For a two-dimensional array, such as the example provided in the question, transposing it is a straightforward process. The following function, named transpose, achieves this:
function transpose($array) { array_unshift($array, null); return call_user_func_array('array_map', $array); }
This function works by adding a null element as the first index of the array and then using array_map to iterate over each row and create a new array of the respective columns.
For instance, to transpose the $foo array given in the question:
$bar = transpose($foo); var_dump($bar[2]);
This will output the desired result:
array(3) { ["a"]=> string(2) "a2" ["b"]=> string(2) "b2" ["c"]=> string(2) "c2" }
Generalizing to Higher-Dimensional Arrays
The transpose function can be generalized to handle arrays of any dimension using recursion. Here's how:
function multi_transpose($array) { if (!is_array($array)) { return array($array); } $transposed = array(); foreach ($array as $key => $value) { $transposed[] = multi_transpose($value); } return call_user_func_array('array_map', $transposed); }
This function takes an array as input and recursively calls itself on the array's values. The base case is when the value is no longer an array, in which case it returns a one-element array containing the value. For arrays, it recursively transposes each value and uses array_map to combine them into the final transposed array.
Using the multi_transpose function is similar to the two-dimensional transpose function:
$multi_dimensional_array = ...; $transposed = multi_transpose($multi_dimensional_array);
This function can handle arbitrarily nested arrays and will transpose them by flipping their dimensions 90 degrees.
The above is the detailed content of How Can I Efficiently Transpose Multidimensional Arrays in PHP?. For more information, please follow other related articles on the PHP Chinese website!