PHP: последний элемент foreach

Изобрел велосипед для определения последнего элемента в цикле foreach() — с помощью функции next(). Чтобы не считать число элементов в массиве, не заводить счетчик и не сравнивать его значение с числом элементов.


foreach ($array as $key => $value) {
   // do something...
   if (!next($array)) {
        // do something for last element
    }
}

Для чего это нужно? Обычно для таких случаев: есть нескольо блоков, разделенных чертой. Я делаю это дивами с border-bottom. Для последнего блока надо указать border:none.

← NOFX в Санкт-Петербурге (28.08.2007). Фото | Главная | The Meteors в Санкт-Петербурге →

Комментарии

мда, век живи век учись, спасибо. (:

Зачот. Я как последний дурак определял (count()-1). Вроде и не новичёк уже, а столь банальный и до ужаса рациональный способ проглядел! Спасибо большое, будем юзать.

Большое тебе человеческое спасибо!

Круто. сначал думал сделать постаринке.. И дума дайка гляну чё люди юзают для этого.. и сразу твой сатец и эта тема..

Короча благодарю..

Выбранное решение подходит только для означенной задачи - т.е. когда есть уже цикл, который делает что-то с каждым элементом массива и нужно проверить, не является ли этот элемент последним.

Если нужно просто получить последний элемент массива, не трогая остальные, проще и быстрее использовать count()-1, а не перебирать один за другим элементы массива. Что, если в массиве 10000000000 элементов? :)

“Выбранное решение подходит только для означенной задачи” - автор комментария был туп и не понял, что писал. В представленном примере как раз и описано решение конкретного случая, вы же, будьте любезны сделайте с собой нечто суицидальное, чтобы избавить мир от ваших очередных псевдоинтеллектуальных эксцессов.

Deeper: чтобы получить последний элемент массива, проще использовать $element = end($array);
аналогично для первого элемента сгодится $element = reset($array);

>мда, век живи век учись, спасибо. (:
подписываюсь под этими словами
ещё не знал про $element = end($array);

Спасибо :)

Допустим приспичело запрос нагенирить “where id=100 or id=101 or id=102 or id=103 or id=104 or id=105”

$ids = array(100, 101, 102, 103, 104, 105);
foreach ($ids as $id) {
$where .= “id=$id”;
if (next($allIDs)){
$where .= ’ OR ‘;
}
}
получим “id=100 or id=101 or id=102 or id=103 or id=104id=105” не подходит сожрано ИЛИ меняем next на each
ВО то что надо:
“id=100 or id=101 or id=102 or id=103 or id=104 or id=105”

Получение индекса последнего элемента в ассоциативном массиве, $ar - исходный массив.

end($ar);
$key = key($ar);

“Допустим приспичело запрос нагенирить “where id=100 or id=101 or id=102 or id=103 or id=104 or id=105””

Проще “where id in (100, 101, 102, 103, 104, 105)”
Соответственно $query = “where id in (“. implode(“, “, $ids) .”)”

Добавить комментарий

(Если вы не оставляли комментариев ранее, то вы должны быть подтверждены владельцем сайта, прежде чем ваш отзыв появится. Спасибо, что подождали.)

Архив

Creative Commons License
This weblog is licensed under a Creative Commons License.
Работает на
Movable Type 3.21
98746801
My status a.kost