PHP: последний элемент foreach
Изобрел велосипед для определения последнего элемента в цикле foreach() — с помощью функции next(). Чтобы не считать число элементов в массиве, не заводить счетчик и не сравнивать его значение с числом элементов.
foreach ($array as $key => $value) {
// do something...
if (!next($array)) {
// do something for last element
}
}
Для чего это нужно? Обычно для таких случаев: есть нескольо блоков, разделенных чертой. Я делаю это дивами с border-bottom. Для последнего блока надо указать border:none.
Комментарии
мда, век живи век учись, спасибо. (:
Написал: dkrnl | September 7, 2007 11:17 AM
Зачот. Я как последний дурак определял (count()-1). Вроде и не новичёк уже, а столь банальный и до ужаса рациональный способ проглядел! Спасибо большое, будем юзать.
Написал: Scorpion | October 8, 2007 05:10 AM
Большое тебе человеческое спасибо!
Написал: vike | August 20, 2008 01:04 PM
Круто. сначал думал сделать постаринке.. И дума дайка гляну чё люди юзают для этого.. и сразу твой сатец и эта тема..
Короча благодарю..
Написал: Deeper | December 4, 2008 01:14 PM
Выбранное решение подходит только для означенной задачи - т.е. когда есть уже цикл, который делает что-то с каждым элементом массива и нужно проверить, не является ли этот элемент последним.
Если нужно просто получить последний элемент массива, не трогая остальные, проще и быстрее использовать count()-1, а не перебирать один за другим элементы массива. Что, если в массиве 10000000000 элементов? :)
Написал: kewl | December 19, 2008 01:12 PM
“Выбранное решение подходит только для означенной задачи” - автор комментария был туп и не понял, что писал. В представленном примере как раз и описано решение конкретного случая, вы же, будьте любезны сделайте с собой нечто суицидальное, чтобы избавить мир от ваших очередных псевдоинтеллектуальных эксцессов.
Написал: Слава | April 1, 2009 06:46 PM
Deeper: чтобы получить последний элемент массива, проще использовать $element = end($array);
аналогично для первого элемента сгодится $element = reset($array);
Написал: Dmitri Ponomarjov | April 27, 2009 11:31 PM
>мда, век живи век учись, спасибо. (:
подписываюсь под этими словами
ещё не знал про $element = end($array);
Написал: Олег | October 15, 2009 11:26 PM
Спасибо :)
Написал: Nick | November 24, 2009 06:11 PM
Допустим приспичело запрос нагенирить “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”
Написал: IrviS | April 8, 2010 10:01 PM
Получение индекса последнего элемента в ассоциативном массиве, $ar - исходный массив.
end($ar);
$key = key($ar);
Написал: Freedom | April 26, 2010 06:07 PM
“Допустим приспичело запрос нагенирить “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) .”)”
Написал: BoShurik | June 9, 2010 12:53 PM
foreach($arr $k=>$v)
{
//do something
if(end($arr)===$v)
{
//последний элемент
}
}
PS зачем ананизм с next() ????
Написал: cioxideru | September 27, 2010 12:32 PM
if (!next($array))
свалится на пустом значении. лучше
if (!isset(next($array)))
Написал: tt | December 21, 2010 04:36 PM