в foreach, isLastItem () существует?

Используя регулярный цикл for, можно сопоставить текущий индекс с последним, чтобы узнать, находится ли я в последней итерации цикла. Есть ли аналогичная вещь при использовании foreach ? Я имею в виду что-то вроде этого.

 foreach($array as $item){ //do stuff //then check if we're in the last iteration of the loop $last_iteration = islast(); //boolean true/false } 

Если нет, существует ли хотя бы способ узнать текущий индекс текущей итерации, например $iteration = 5 , поэтому я могу вручную сравнить его с длиной $array ?

Related of "в foreach, isLastItem () существует?"

Вы можете использовать комбинацию классов ArrayIterator и класса CacheIterator для SPL, чтобы иметь метод hasNext :

 $iter = new CachingIterator(new ArrayIterator($arr)); foreach ($iter as $value) { $last_iteration = !$iter->hasNext(); } 

Метод счетчика, вероятно, самый простой.

 $i = count($array); foreach($array as $item){ //do stuff //then check if we're in the last iteration of the loop $last_iteration = !(--$i); //boolean true/false } 

Нет, вам нужно иметь счетчик и знать количество элементов в списке. Вы можете использовать end() чтобы получить последний элемент в массиве и посмотреть, соответствует ли оно текущему значению в вашем foreach .

Если вы знаете, что значения массива всегда будут уникальными, вы можете сравнить текущий $item to end($array) чтобы узнать, есть ли у вас последний элемент. В противном случае нет, вам нужен счетчик.

Вы можете получить ключ и значение в foreach() следующим образом:

foreach($array as $key=>$value) { ... }

В качестве альтернативы вы можете сделать count() массива, чтобы вы знали, сколько у него элементов есть, и иметь счетчик приращений, чтобы вы знали, когда достигли последнего элемента.

 end($array); $lastKey = key($array); foreach($array as $key => $value) { if ($key === $lastKey) { // do something endish } } 

Вот несколько способов для этого;

 $items = ["Bhir", "Ekky", null, "Uych", "foo"=>"bar"]; $values = array_values($items); // Bhir, Ekky, Uych, bar foreach ($values as $i => $item) { print("$item"); $next = isset($values[$i + 1]); if ($next) { print(", "); } } // Bhir, Ekky, , Uych, bar foreach ($values as $i => $item) { print("$item"); $next = array_key_exists($i + 1, $values); if ($next) { print(", "); } } // Bhir, Ekky, , Uych, bar $i = count($values); foreach ($items as $item) { print("$item"); $next = !!(--$i); if ($next) { print(", "); } } // Bhir, Ekky, , Uych, bar $items = new \CachingIterator(new \ArrayIterator($items)); foreach ($items as $item) { print("$item"); $next = $items->hasNext(); if ($next) { print(", "); } } 

Метод valid () указывает, имеет ли объект ArrayIterator больше элементов.

Видеть:

 $arr = array("Banana","Abacaxi","Abacate","Morango"); $iter = new ArrayIterator($arr); while($iter->valid()){ echo $iter->key()." - ".$iter->current()."<br/>"; $iter->next(); } в $arr = array("Banana","Abacaxi","Abacate","Morango"); $iter = new ArrayIterator($arr); while($iter->valid()){ echo $iter->key()." - ".$iter->current()."<br/>"; $iter->next(); }