Count ($array)返回错误的数组长度


count($array) returning wrong array length

我试着写一个程序,打印数组元素的每一个可能的排列。

示例: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?

array splice通过引用获取数组

array array_splice( array &$input , int $offset [, int $length [, mixed $replacement = array() ]] )

表示它正在改变给定的数组。
当你从0迭代到count($array)时,它会计算每次循环运行的数组长度。

$array = [1,2,3,4,5];
count($array); //5
array_splice($array,2);
count($array); //2

array_splice改变数组长度。