Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.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 - Fatal编程技术网

Php 生成矩阵的所有组合

Php 生成矩阵的所有组合,php,Php,我用这段代码生成矩阵中的所有组合 但它并没有返回输出。你能帮我吗 function combos($data, $all = array(), $group = array(), $val = null,$i=0) { if (isset($val)) { array_push($group, $val); } if ($i >= count($data)) { array_push($all, $group); } else

我用这段代码生成矩阵中的所有组合 但它并没有返回输出。你能帮我吗

function combos($data, $all = array(), $group = array(), $val = null,$i=0) {
    if (isset($val)) {
        array_push($group, $val);
    }
    if ($i >= count($data)) {
        array_push($all, $group);
    } else {
        foreach ($data[$i] as $v) {
            combos($data, &$all, $group, $v, $i + 1);
        }
    }
    return $all;
}
$data = array(
    array('a', 'b'),
    array('d', 'e', 'g'),
    array('w', 'x', 'y', 'z')
);
$combos = combos($data);
print_r($combos);
输出应该是

            0 1 2
array[0]  = a d w
array[1]  = a d x
array[2]  = a d y
array[3]  = a d z
array[4]  = a e w
array[5]  = a e x
array[6]  = a e y
.
.
.
array[23] = b g z

$all
作为
值传递,而不是作为
foreach
循环中的引用传递。另外,您没有在
foreach
循环中收集
combos
函数的返回值

修改
组合($data,&$all,$group,$v,$i+1)



$all=组合($data、$all、$group、$v、$i+1)

foreach
循环中将
$all
作为
值传递,而不是作为引用传递。另外,您没有在
foreach
循环中收集
combos
函数的返回值

修改
组合($data,&$all,$group,$v,$i+1)



$all=组合($data、$all、$group、$v、$i+1)

从递归
组合函数调用捕获返回值,并从递归函数调用中删除按引用传递
和$all

<?php
function combos($data, $all = array(), $group = array(), $val = null, $i = 0)
{
    if (isset($val)) {
        array_push($group, $val);
    }

    if ($i >= count($data)) {
        array_push($all, $group);
    } else {
        foreach ($data[$i] as $v) {
            $all = combos($data, $all, $group, $v, $i + 1);
        }
    }
    return $all;
}

$data = array
(
    array('a', 'b'),
    array('d', 'e', 'g'),
    array('w', 'x', 'y', 'z'),
);

$combos = combos($data);

print_r($combos);

?>


工作示例

从递归函数调用中捕获返回值
组合函数
并从递归函数调用中删除pass by reference
和$all

<?php
function combos($data, $all = array(), $group = array(), $val = null, $i = 0)
{
    if (isset($val)) {
        array_push($group, $val);
    }

    if ($i >= count($data)) {
        array_push($all, $group);
    } else {
        foreach ($data[$i] as $v) {
            $all = combos($data, $all, $group, $v, $i + 1);
        }
    }
    return $all;
}

$data = array
(
    array('a', 'b'),
    array('d', 'e', 'g'),
    array('w', 'x', 'y', 'z'),
);

$combos = combos($data);

print_r($combos);

?>


工作示例

如@PerakSola和@Samir所说,您可以收集
组合
值的返回值,也可以通过引用传递
$all
变量。要正确执行此操作,请使用以下代码:

function combos($data, &$all = array(), $group = array(), $val = null, $i = 0)
{
    if (isset($val)) {
        array_push($group, $val);
    }

    if ($i >= count($data)) {
        array_push($all, $group);
    } else {
        foreach ($data[$i] as $v) {
            combos($data, $all, $group, $v, $i + 1);
        }
    }
    return $all;
}

$data = array
(
    array('a', 'b'),
    array('d', 'e', 'g'),
    array('w', 'x', 'y', 'z'),
);

$combos = combos($data);

print_r($combos);

如@PerakSola和@Samir所说,您可以收集
组合的返回值
值,或者通过引用传递
$all
变量。要正确执行此操作,请使用以下代码:

function combos($data, &$all = array(), $group = array(), $val = null, $i = 0)
{
    if (isset($val)) {
        array_push($group, $val);
    }

    if ($i >= count($data)) {
        array_push($all, $group);
    } else {
        foreach ($data[$i] as $v) {
            combos($data, $all, $group, $v, $i + 1);
        }
    }
    return $all;
}

$data = array
(
    array('a', 'b'),
    array('d', 'e', 'g'),
    array('w', 'x', 'y', 'z'),
);

$combos = combos($data);

print_r($combos);