Как удалить каждый третий элемент в массиве php, пока не останется только один элемент, и напечатать этот элемент?

Массив такой

$a = array(1,2,3,4,5,6,7,8);

После этого в каждой итерации третий элемент должен быть удален, пока он не достигнет одного элемента.

итерация будет примерно такой

индекс: 0 1 2 3 4 5 6 7

значение: 1 2 3 4 5 6 7 8
это нормальный

индекс: 0 1 2 3 4 5 6 7

значение: 1 2 4 5 7 8
здесь 3 и 6 удалены, как они вышли в качестве 3-х элементов

затем после удаления 6 он должен считать 7 и 8 как 1-й и 2-й и перейти к значению 1, которое составляет 1 как 3-й элемент. Это продолжается до тех пор, пока не останется только один элемент.

выход

12345678

1245678

124578

24578

2478

478

47

7

7 является оставшимся элементом

1

Решение

Вот код, надеюсь, это поможет.

<?php
$array = [1,2, 3,4,5,6,7,8];

function removeAtNth($array, $nth)
{
$step = $nth - 1;       //gaps between operations
$benchmark = 0;
while(isset($array[1]))
{
$benchmark += $step;
$benchmark = $benchmark > count($array) -1 ? $benchmark % count($array) : $benchmark;
echo $benchmark."\n";
unset($array[$benchmark]);
$array = array_values($array);
echo implode('', $array)."\n";
}
}

removeAtNth($array, 3);

результат:

kris-roofe@krisroofe-Rev-station:~$ php test.php
1245678
124578
24578
2478
478
47
7
1

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

Вы ищете array_chunk ()

$a = array(1,2,3,4,5,6,7,8);
$thirds = array_chunk($a, 3);

$ трети сейчас это как:

Array
(
[0] => Array
(
[0] => 1
[1] => 2
[2] => 3
)

[1] => Array
(
[0] => 4
[1] => 5
[2] => 6
)

[2] => Array
(
[0] => 7
[1] => 8
)
)

Затем просто переберите массив $ трети и array_pop () чтобы захватить последнее значение.

Однако я не уверен, почему вы хотите получить 7 в конце, а не 8. Вы можете объяснить?

1

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