Home > Backend Development > PHP Tutorial > How can I efficiently generate all possible combinations of elements from multiple PHP arrays of varying lengths?

How can I efficiently generate all possible combinations of elements from multiple PHP arrays of varying lengths?

Susan Sarandon
Release: 2024-12-12 10:33:11
Original
632 people have browsed it

How can I efficiently generate all possible combinations of elements from multiple PHP arrays of varying lengths?

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');
Copy after login

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'],
]
Copy after login

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;
}
Copy after login

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!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template