PHP Find All (somewhat) Unique Combinations of an Array

后端 未结 6 2214
独厮守ぢ
独厮守ぢ 2020-12-03 12:02

I\'ve been looking at PHP array permutation / combination questions all day.. and still can\'t figure it out :/

If I have an array like:

20 //key bei         


        
6条回答
  •  我在风中等你
    2020-12-03 12:45

    Why not just use binary? At least then its simple and very easy to understand what each line of code does like this? Here's a function i wrote for myself in a project which i think is pretty neat!

    function search_get_combos($array){
    $bits = count($array); //bits of binary number equal to number of words in query;
    //Convert decimal number to binary with set number of bits, and split into array
    $dec = 1;
    $binary = str_split(str_pad(decbin($dec), $bits, '0', STR_PAD_LEFT));
    while($dec < pow(2, $bits)) {
        //Each 'word' is linked to a bit of the binary number.
        //Whenever the bit is '1' its added to the current term.
        $curterm = "";
        $i = 0;
        while($i < ($bits)){
            if($binary[$i] == 1) {
                $curterm[] = $array[$i]." ";
            }
            $i++;
        }
        $terms[] = $curterm;
        //Count up by 1
        $dec++;
        $binary = str_split(str_pad(decbin($dec), $bits, '0', STR_PAD_LEFT));
    }
    return $terms;
    } 
    

    For your example, this outputs:

    Array
    (
        [0] => Array
            (
                [0] => 24 
            )
        [1] => Array
            (
                [0] => 22 
            )
        [2] => Array
            (
                [0] => 22 
                [1] => 24 
            )
        [3] => Array
            (
                [0] => 20 
            )
        [4] => Array
            (
                [0] => 20 
                [1] => 24 
            )
        [5] => Array
            (
                [0] => 20 
                [1] => 22 
            )
        [6] => Array
            (
                [0] => 20 
                [1] => 22 
                [2] => 24 
            )
        [7] => Array
            (
                [0] => 20 
            )
        [8] => Array
            (
                [0] => 20 
                [1] => 24 
            )
        [9] => Array
            (
                [0] => 20 
                [1] => 22 
            )
        [10] => Array
            (
                [0] => 20 
                [1] => 22 
                [2] => 24 
            )
        [11] => Array
            (
                [0] => 20 
                [1] => 20 
            )
        [12] => Array
            (
                [0] => 20 
                [1] => 20 
                [2] => 24 
            )
        [13] => Array
            (
                [0] => 20 
                [1] => 20 
                [2] => 22 
            )
        [14] => Array
            (
                [0] => 20 
                [1] => 20 
                [2] => 22 
                [3] => 24 
            )
    )
    

提交回复
热议问题