Generating Combinations of Items in Multiple PHP Arrays
When dealing with multiple arrays of varying lengths, it becomes challenging to generate all possible combinations of their elements. This article addresses this problem, providing a versatile PHP solution.
The task is to create a function that accepts an arbitrary number of arrays and outputs an array containing all possible combinations of their elements. For instance, given three arrays:
$arrayA = array('A1', 'A2', 'A3'); $arrayB = array('B1', 'B2', 'B3'); $arrayC = array('C1', 'C2');
The desired output would be an array of 18 combinations:
[ ['A1', 'B1', 'C1'], ['A1', 'B1', 'C2'], ['A1', 'B2', 'C1'], ['A1', 'B2', 'C2'], ['A1', 'B3', 'C1'], ['A1', 'B3', 'C2'], ['A2', 'B1', 'C1'], ['A2', 'B1', 'C2'], ['A2', 'B2', 'C1'], ['A2', 'B2', 'C2'], ['A2', 'B3', 'C1'], ['A2', 'B3', 'C2'], ['A3', 'B1', 'C1'], ['A3', 'B1', 'C2'], ['A3', 'B2', 'C1'], ['A3', 'B2', 'C2'], ['A3', 'B3', 'C1'], ['A3', 'B3', 'C2'], ]
The solution employs a recursive approach:
function combinations($arrays, $i = 0) { if (!isset($arrays[$i])) { return array(); } if ($i == count($arrays) - 1) { return $arrays[$i]; } // get combinations from subsequent arrays $tmp = combinations($arrays, $i + 1); $result = array(); // concat each array from tmp with each element from $arrays[$i] foreach ($arrays[$i] as $v) { foreach ($tmp as $t) { $result[] = is_array($t) ? array_merge(array($v), $t) : array($v, $t); } } return $result; }
This function takes an array of arrays as input and initializes a recursive counter, $i, to zero. It checks if the current array at index $i exists and returns an empty array if it does not. If $i is equal to the last index, it signifies the base case, and the current array is returned.
Otherwise, it recursively calls combinations to obtain combinations of subsequent arrays, stored in $tmp. It initializes an empty $result array and iterates over the current array at index $i. For each element in this array, it concatenates it with each combination from $tmp, appending the result to $result.
This process recursively unfolds until all combinations have been generated. The resulting array is returned, representing all possible combinations of items in the input arrays.
The above is the detailed content of How can I efficiently generate all possible combinations of elements from multiple PHP arrays of varying lengths?. For more information, please follow other related articles on the PHP Chinese website!