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) .”)”

foreach($arr $k=>$v)
{
//do something
if(end($arr)===$v)
{
//последний элемент
}
}
PS зачем ананизм с next() ????

if (!next($array))

свалится на пустом значении. лучше
if (!isset(next($array)))

Архив

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