Home > Backend Development > PHP Tutorial > How to Generate All Possible Combinations from a 1D Array in PHP?

How to Generate All Possible Combinations from a 1D Array in PHP?

DDD
Release: 2024-10-30 16:38:02
Original
580 people have browsed it

 How to Generate All Possible Combinations from a 1D Array in PHP?

PHP: Retrieval of All Possible Combinations of a 1D Array

Introduction

The task of retrieving all possible combinations of elements from a 1D array can be encountered in various programming applications. It requires a comprehensive understanding of iterative or recursive approaches to derive all feasible permutations.

Iterative Approach

One method involves using an iterative approach, as demonstrated in the following code:

<code class="php">function getCombinations($arr) {
    $result = array();
    $count = count($arr);
    for ($i = 0; $i < (1 << $count); $i++) {
        $combination = array();
        for ($j = 0; $j < $count; $j++) {
            if (($i & (1 << $j)) != 0) {
                $combination[] = $arr[$j];
            }
        }
        $result[] = $combination;
    }
    return $result;
}

$array = array('Alpha', 'Beta', 'Gamma');
$combinations = getCombinations($array);

print_r($combinations);
Copy after login

Output:

Array
(
    [0] => Array
        (
        )

    [1] => Array
        (
            [0] => Alpha
        )

    [2] => Array
        (
            [0] => Beta
        )

    [3] => Array
        (
            [0] => Alpha
            [1] => Beta
        )

    [4] => Array
        (
            [0] => Gamma
        )

    [5] => Array
        (
            [0] => Alpha
            [1] => Gamma
        )

    [6] => Array
        (
            [0] => Beta
            [1] => Gamma
        )

    [7] => Array
        (
            [0] => Alpha
            [1] => Beta
            [2] => Gamma
        )

)</code>
Copy after login

Explanation:

This iterative solution employs bit manipulation to generate all possible combinations. By incrementing the value of $i through all possible values between 0 and (1 << $count) - 1, the bit pattern corresponding to each combination is established. Checking whether a specific bit in this pattern is set allows the determination of which elements from the input array belong to the current combination.

Recursive Approach

Alternatively, a recursive approach can be utilized to achieve the same result:

<code class="php">function getCombinations($arr, $prefix = '') {
    $result = array();
    foreach ($arr as $element) {
        $result[] = $prefix . $element;
        $result = array_merge($result, getCombinations($arr, $prefix . $element . ' '));
    }
    return $result;
}

$array = array('Alpha', 'Beta', 'Gamma');
$combinations = getCombinations($array);

print_r($combinations);
Copy after login

Output:

Array
(
    [0] => Alpha
    [1] => Alpha Beta
    [2] => Alpha Beta Gamma
    [3] => Alpha Gamma
    [4] => Alpha Gamma Beta
    [5] => Beta
    [6] => Beta Alpha
    [7] => Beta Alpha Gamma
    [8] => Beta Gamma
    [9] => Beta Gamma Alpha
    [10] => Gamma
    [11] => Gamma Alpha
    [12] => Gamma Alpha Beta
    [13] => Gamma Beta
    [14] => Gamma Beta Alpha
)

Explanation:

This recursive solution generates combinations by successively adding elements to the prefix and recursing on the remaining elements in the array. The base case occurs when the array is empty, resulting in a valid combination. The combinations are then returned in reverse order.

By utilizing either an iterative or recursive approach, developers can effectively retrieve all possible combinations of elements from a 1D array, catering to the diverse requirements of different programming scenarios.

The above is the detailed content of How to Generate All Possible Combinations from a 1D Array in PHP?. 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
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template