[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Массив помогите
Страницы: 1, 2
pavlGleb
Всем привет ребята такой вопрос. Допустим есть массив. Мне нужно пройти по массиву и удалить каждый второй элемент массива. Вот код:


function delEl($array, $del)
{
$i = $del;
$count = count($array);
for($i; $i < $count; $i+=$del)
{
unset($array[$i]);
}
echo "Второй массив";
print_r($array);
}


где $del - через сколько элементов удалять!

Вопрос. Как реализовать чтобы цикл по массиву проходил и удалял элементы пока не останется один элемент? У меня раз прошел удалил и каждый второй элемент например и остановился. Надеюсь понятно объяснил? Спасибо!
Valick
Цитата
Как реализовать чтобы цикл по массиву проходил и удалял элементы пока не останется один элемент!

использовать рекурсию или цикл do{}while(); , а еще есть много штатных функций работы с массивами например array_reduce
___
а еще у вас функция работает, только с числовыми ключами, т.е ассоциативный массив не обработает, хотя может это и не важно, просто не люблю решения "в лоб"

_____________
Стимулятор ~yoomoney - 41001303250491
pavlGleb
Спасибо!
killer8080
Цитата (pavlGleb @ 10.01.2014 - 10:58)
Вопрос! Как реализовать чтобы цикл по массиву проходил и удалял элементы пока не останется один элемент!

:blink:
это как? Что должно остаться?

$arr = array($arr[0]);
:D
Valick
killer8080, не обязательно $arr[0], это может быть и $arr[10], или $arr[0], но уже содержащий значение $arr[5] начального массива

_____________
Стимулятор ~yoomoney - 41001303250491
killer8080
Valick
я не въехал в задачу, нужно удалить каждый второй элемент массива, но при этом должен остаться только один blink.gif
Valick
killer8080, ну при такой постановке да, но я думаю просто условие задачи еще не до конца сформировано в соотвествии с хотелками, просто я немножко заглянул в будущее (как обычно smile.gif )
просто сама задача странная, и я не берусь гадать зачем ТС это надо smile.gif

_____________
Стимулятор ~yoomoney - 41001303250491
AllesKlar
pavlGleb
Обрати внимание, что ты удаляешь не каждый второй (третий и т.д.) элемент массива, а элемнты массива с ключами, кратными $del

Допустим, $del = 2;
При первой итерации ты удалишь элементы массива с ключами 2, 4, 6 ...
При второй итерации ты ничего не удалишь, т.к. в массиве уже не будет существовать элементов с ключами, кратными 2.

Для полного понимания, вот код (учти, он не завершится никогда :) )

function delEl($array, $del)
{
$i = $del;
$count = count($array);
for($i; $i < $count; $i+=$del)
{
unset($array[$i]);
}
return $array;
}

for($i = 0; $i < 50; $i++)
$arr[] = $i;

while(count($arr) > 2)
$arr = delEl($arr, 2);

echo "<pre>";
print_r($arr);
echo "</pre>";


_____________
[продано копирайтерам]
Valick
AllesKlar, вы опять работает с цифрами ключей массива, логически это не верно, напишите код для ассоциативного массива, и он схавает и обычный массив

_____________
Стимулятор ~yoomoney - 41001303250491
AllesKlar
Valick
Это и ежу понятно.
ТС учится, пусть сначала недостатки метода прочувствует.
Это одна из распространненых ошибок новичков, думая, что после unset($array[5]) у него опять же будет правильная последовательность индексов.
И долбятся потом в несуществующий 5ый элемент массива.

_____________
[продано копирайтерам]
linker
В существующей постановке задачи результат всегда будет
$endArray = array(reset($inputArray));
увеличивая число "каждый n-ый элемент" - $n у нас в результате будет оставаться первые $n-1 элементов начального массива.

_____________
Gear Framework
Gear Framework на Github
linker
Т.е. при $n > 2 можно тупо писать
$endArray = array_slice($inputArray, 0, $n - 1, true);


_____________
Gear Framework
Gear Framework на Github
sergeiss
Цитата (pavlGleb @ 10.01.2014 - 12:58)
Как реализовать чтобы цикл по массиву проходил и удалял элементы пока не останется один элемент?

После этой фразы можно было ничего не писать, кроме одного вопроса: какой именно элемент должен остаться, по какому критерию?

И еще - начальное сообщение я отредактировал, потому что множество восклицательных знаков равноценно постоянным воплям. Не люблю вопли на форумах smile.gif А в русском языке, кроме восклицательных знаков, еще есть точки и вопросительные знаки.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
AllesKlar
Попробую предположить, что это задача из учебника :)

И звучит она так:

Написать функцию delEl($array, $del), которая будет в массиве $array удалять каждый элемент в позиции, кратной $del.

При многократном вызове функции, в массиве должно остаться $del - 1 элементов.

Пример
$array = array(1,2,3,4,5,6,7,8);

$array = delEl($array, 3);
// $array == array(1,2,4,5,7,8);

$array = delEl($array, 3);
// $array == array(1,2,5,7);

$array = delEl($array, 3);
// $array == array(1,2,7);

$array = delEl($array, 3);
// $array == array(1,2);



_____________
[продано копирайтерам]
AllesKlar
давайте не будем писать решение, уже все разжовано, может проглотит сам? smile.gif ну или попытается smile.gif

_____________
[продано копирайтерам]
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.