我正在使用此代码生成矩阵中的所有组合 但它没有返回输出。你能救我吗?
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
答案 0 :(得分:0)
在$all
循环中将value and not as reference
作为foreach
传递。您也没有在combos
循环中收集foreach
函数的返回值。
修改
combos($data, &$all, $group, $v, $i + 1);
至
$all = combos($data, $all, $group, $v, $i + 1);
答案 1 :(得分:0)
从递归combo
函数调用中捕获返回值,并从递归函数调用中删除引用&$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);
?>
工作示例link
答案 2 :(得分:0)
与@PerakSola和@Samir一样,您可以收集combos
值的返回值,或者您可以通过引用传递$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);