Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.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 Foreach循环+;递归_Php_Recursion_Foreach_Combinations - Fatal编程技术网

Php Foreach循环+;递归

Php Foreach循环+;递归,php,recursion,foreach,combinations,Php,Recursion,Foreach,Combinations,我试图以一种更灵活的方式来编写这段代码,这样它就可以在$sets数组的任何大小下工作。我想它可以通过递归来完成,但是找不到正确的php语法 $sets = array( array(0, 1, 2, 3), array(0, 1, 2, 3), array(0, 1, 2, 3), array(0, 1, 2, 3) ); $combi

我试图以一种更灵活的方式来编写这段代码,这样它就可以在$sets数组的任何大小下工作。我想它可以通过递归来完成,但是找不到正确的php语法

$sets = array(
                array(0, 1, 2, 3),
                array(0, 1, 2, 3),
                array(0, 1, 2, 3),
                array(0, 1, 2, 3)
                );

$combinations = array();

foreach($sets[0] as $s1)
    foreach($sets[1] as $s2)
        foreach($sets[2] as $s3)
            foreach($sets[3] as $s4)
                $combinations[] = array($s1, $s2, $s3, $s4);

print_r($combinations);

可以像这样在递归中执行。输出与循环相同

<?php
$sets = array(
    array(0, 1, 2, 3),
    array(0, 1, 2, 3),
    array(0, 1, 2, 3),
    array(0, 1, 2, 3)
);

function get_combinations($sets, &$combinations = array(), &$row = array()) {
    if (count($sets) == 0) {
        $combinations[] = $row;
        return $combinations;
    }
    foreach ($sets[0] as $s) {
        $row[] = $s;
        get_combinations(array_slice($sets, 1), $combinations, $row);
        array_pop($row);
    }
    return $combinations;
}

$combinations = get_combinations($sets);

print_r($combinations);