我下面有嵌套的数组结构。
$letters = array(
$A = array(1,2),
$B = array(3,4),
$C = array(5,6)
);
我的目标是找到数字的所有可能排列,而字母必须保持顺序A-B-C。预期的输出是:
1-3-5
1-3-6
1-4-5
1-4-6
2-3-5
2-3-6
2-4-5
2-4-6
当然,这可以通过foreach轻松完成:
foreach($A as $a){
foreach($B as $b){
foreach($C as $c){
echo $a.$b.$c.'<br>';
}
}
}
但是,我希望它可以动态地工作,并使用不同数量的数组。我已经知道递归方法可以奏效,但是我无法解决这个问题。有人可以帮忙吗?
答案 0 :(得分:3)
只需将字符串传递给递归:
function work($str, $arr, $i)
{
$last = ($i == count($arr) - 1);
foreach ($arr[$i] as $c)
{
if ($last)
echo $str . $c . "\n"; // print whole line
else
work($str . $c, $arr, $i + 1); // recurse to next column
}
}
$letters = array(
array(1,2),
array(3,4),
array(5,6)
);
work("", $letters, 0);
产生
135
136
145
146
235
236
245
246