Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何从多个阵列获取所有组合?_Php_Arrays_Matrix_Combinations - Fatal编程技术网

Php 如何从多个阵列获取所有组合?

Php 如何从多个阵列获取所有组合?,php,arrays,matrix,combinations,Php,Arrays,Matrix,Combinations,假设我有这3个数组 $array1 = array(1,2); $array2 = array(4,5); $array3 = array(7,8); 我需要这个输出 1 4 7 1 4 8 1 5 7 1 5 8 2 4 7 2 4 8 2 5 7 2 5 8 我的一个问题是,我的数组myght从3到15个不同的数组不等,每个myght都是空的(我可能会添加一个0,但不是空的)或者有很多值。 如果我有一个空数组,我还需要将其计算为有效列。这些值将用于按特定顺序填充数据库 有什么方法可以做到

假设我有这3个数组

$array1 = array(1,2);
$array2 = array(4,5);
$array3 = array(7,8);
我需要这个输出

1 4 7
1 4 8
1 5 7
1 5 8
2 4 7
2 4 8
2 5 7
2 5 8
我的一个问题是,我的数组myght从3到15个不同的数组不等,每个myght都是空的(我可能会添加一个0,但不是空的)或者有很多值。 如果我有一个空数组,我还需要将其计算为有效列。这些值将用于按特定顺序填充数据库

有什么方法可以做到这一点吗?

有多少种组合? 那么首先的问题是有多少种组合?答案是你必须将每个数组的数量相乘

So(c=数量1):

卡雷1*卡雷2*…*卡雷

并针对您的示例进行了具体说明:

卡雷1*卡雷2*卡雷3=2*2*2=8

*1如果您想知道为什么我选择c作为amount,因为php中的函数count()

将所有组合组合在一起 我们现在如何得到所有的数组数量的组合呢

我们循环遍历我们已经拥有的所有组合(从一个组合开始,一个“空组合”(
$combinations=[[]];
),对于每个组合,我们遍历下一个数据数组,并将每个组合与每个输入数据组合成一个新的组合

现在我们这样做,直到得到每个组合所需的长度

例如:

Array with the elements (Empty array is '[]'):

[
    [1, 2],
    [3, 4]
]
*南:不是数字

正如你在上面的例子中看到的,我们现在有了所有的组合,它们的长度是我们所有数组的长度

但是,为了只获得具有所需长度的组合,我们在每次迭代中都会覆盖结果数组,因此在最后,结果数组中只有具有所需长度的组合

代码:
对于关联阵列,您只需进行轻微修改,即:

  • 首先使用
    array\u keys()
    将数组键分配给变量,例如

    $keys = array_keys($data);
    
  • 使用第二个foreach循环中的键访问数据数组,表示从:

    foreach ($data[$count] as $v2)
    
    致:

    foreach($data[$keys[$count]]作为$v2)

  • 我为每个数组尝试了foreach()级联,但workLet看不到。在这里发布。我能做的最好的事情就是从这样的foreach($array1为$a1){$var.=$a1;foreach($array2为$a2){$var.=$a2;foreach($array3为$a3){$var.=$a3;}$var.='
    ;}但是我不知道如何用我需要的值填充第一列,那么这个问题我们在哪里?@Phil_1984_但是他的代码仍然不是很灵活。。
    Array
    (
        [0] => Array
            (
                [0] => 1
                [1] => 4
                [2] => 7
            )
        //...
        [7] => Array
            (
                [0] => 2
                [1] => 5
                [2] => 8
            )
    
    )
    
    $keys = array_keys($data);
    
    foreach ($data[$count] as $v2)
    
    foreach ($data[$keys[$count]] as $v2)
    <?php
    
    $color = array('Blue','Red','Black','Green');
    $size = array('L','M','S','XL','XXL');
    $type  = array('Half selevs','full seleves');
    $options = [
                $color,
                $size,
                $type,
            ];
    $combinations = getCombinations($options);
    
    print_r($combinations);
    
    function getCombinations($options){ 
    
                $combinations = [[]];
    
                for ($count = 0; $count < count($options); $count++) {
                    $tmp = [];
                    foreach ($combinations as $v1) {
                        foreach ($options[$count] as $v2)
                            $tmp[] = array_merge($v1, [$v2]);
    
                    }
                    $combinations = $tmp;
                }
    
                return $combinations;
            }
    ?>
    
    Array
    (
        [0] => Array
            (
                [0] => Blue
                [1] => L
                [2] => Half selevs
            )
    
        [1] => Array
            (
                [0] => Blue
                [1] => L
                [2] => full seleves
            )
    
        [2] => Array
            (
                [0] => Blue
                [1] => M
                [2] => Half selevs
            )
    
        [3] => Array
            (
                [0] => Blue
                [1] => M
                [2] => full seleves
            )
    
        [4] => Array
            (
                [0] => Blue
                [1] => S
                [2] => Half selevs
            )
    
        [5] => Array
            (
                [0] => Blue
                [1] => S
                [2] => full seleves
            )
    
        [6] => Array
            (
                [0] => Blue
                [1] => XL
                [2] => Half selevs
            )
    
        [7] => Array
            (
                [0] => Blue
                [1] => XL
                [2] => full seleves
            )
    
        [8] => Array
            (
                [0] => Blue
                [1] => XXL
                [2] => Half selevs
            )
    
        [9] => Array
            (
                [0] => Blue
                [1] => XXL
                [2] => full seleves
            )
    
        [10] => Array
            (
                [0] => Red
                [1] => L
                [2] => Half selevs
            )
    
        [11] => Array
            (
                [0] => Red
                [1] => L
                [2] => full seleves
            )
    
        [12] => Array
            (
                [0] => Red
                [1] => M
                [2] => Half selevs
            )
    
        [13] => Array
            (
                [0] => Red
                [1] => M
                [2] => full seleves
            )
    
        [14] => Array
            (
                [0] => Red
                [1] => S
                [2] => Half selevs
            )
    
        [15] => Array
            (
                [0] => Red
                [1] => S
                [2] => full seleves
            )
    
        [16] => Array
            (
                [0] => Red
                [1] => XL
                [2] => Half selevs
            )
    
        [17] => Array
            (
                [0] => Red
                [1] => XL
                [2] => full seleves
            )
    
        [18] => Array
            (
                [0] => Red
                [1] => XXL
                [2] => Half selevs
            )
    
        [19] => Array
            (
                [0] => Red
                [1] => XXL
                [2] => full seleves
            )
    
        [20] => Array
            (
                [0] => Black
                [1] => L
                [2] => Half selevs
            )
    
        [21] => Array
            (
                [0] => Black
                [1] => L
                [2] => full seleves
            )
    
        [22] => Array
            (
                [0] => Black
                [1] => M
                [2] => Half selevs
            )
    
        [23] => Array
            (
                [0] => Black
                [1] => M
                [2] => full seleves
            )
    
        [24] => Array
            (
                [0] => Black
                [1] => S
                [2] => Half selevs
            )
    
        [25] => Array
            (
                [0] => Black
                [1] => S
                [2] => full seleves
            )
    
        [26] => Array
            (
                [0] => Black
                [1] => XL
                [2] => Half selevs
            )
    
        [27] => Array
            (
                [0] => Black
                [1] => XL
                [2] => full seleves
            )
    
        [28] => Array
            (
                [0] => Black
                [1] => XXL
                [2] => Half selevs
            )
    
        [29] => Array
            (
                [0] => Black
                [1] => XXL
                [2] => full seleves
            )
    
        [30] => Array
            (
                [0] => Green
                [1] => L
                [2] => Half selevs
            )
    
        [31] => Array
            (
                [0] => Green
                [1] => L
                [2] => full seleves
            )
    
        [32] => Array
            (
                [0] => Green
                [1] => M
                [2] => Half selevs
            )
    
        [33] => Array
            (
                [0] => Green
                [1] => M
                [2] => full seleves
            )
    
        [34] => Array
            (
                [0] => Green
                [1] => S
                [2] => Half selevs
            )
    
        [35] => Array
            (
                [0] => Green
                [1] => S
                [2] => full seleves
            )
    
        [36] => Array
            (
                [0] => Green
                [1] => XL
                [2] => Half selevs
            )
    
        [37] => Array
            (
                [0] => Green
                [1] => XL
                [2] => full seleves
            )
    
        [38] => Array
            (
                [0] => Green
                [1] => XXL
                [2] => Half selevs
            )
    
        [39] => Array
            (
                [0] => Green
                [1] => XXL
                [2] => full seleves
            )
    
    )