【发布时间】:2015-08-17 20:56:10
【问题描述】:
我正在尝试编写一个程序,打印数组元素的所有可能排列。
示例:listPermutations($array),其中$array = array(0,1,2) 应返回六个排列 0,1,2 0,2,1 1,0,2、1,2,0、2,0,1、2,1,0。
我目前的代码是:
<?php
$myNumber = 3;
function createArray($objCount){
for($i = 0; $i < $objCount; $i++){
$array[$i] = $i;
}
return $array;
}
function printPermutations($array, $firstObj){
//echo var_dump($array)."<br>";
echo count($array)."<br>";
if(count($array) == 2){
echo $firstObj.$array[0].$array[1];
echo $firstObj.$array[1].$array[0];
}
else{
for($i = 0; $i < count($array); $i++){
$arrayWithoutI = array_splice($array, $i, 1);
echo var_dump($array)."<br>";
echo printPermutations($arrayWithoutI, $i).' ';
}
}
}
function listPermutations($objCount){
$array = createArray($objCount);
//echo print_r($array)."<br>";
printPermutations($array, 0);
}
echo listPermutations($myNumber);
?>
代码应该递归地工作如下:
如果 $array 的数组长度不等于 2,则对于数组中的每个元素 $i 调用 printPermutaions 并删除 $i 并将 $i 作为
排列的第一个元素。
但是程序的输出如下:
3
array(2) { [0]=> int(1) [1]=> int(2) }
1
array(0) { }
1
array(0) { }
1
array(0) { }
1
array(0) { }
1 ...
...
为什么去掉一个元素后的输出是1而不是2?
【问题讨论】:
-
echo var_dump($array)你打印var_dump()的返回值,这只是不必要的。echo printPermutations(...)也一样,它也不打印任何东西。 -
确实如此,但这仅用于测试目的。
-
@Alex Rizier123 的意思是你根本不需要
echo。var_dump()打印一个值但返回什么都没有,所以使用echo是完全多余的。 -
点了。感谢您的澄清。
标签: php arrays permutation