count ($ array) возвращает неправильную длину массива

Я пытаюсь написать программу, которая печатает все возможные перестановки элементов массива.

Пример: 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 не равно двум, то для каждого элемента $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?

0

Решение

сращивание массива получает массив по ссылке

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 изменяет длину массива. и считать ($ массив) изменений.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]