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);