Используя регулярный цикл 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
?
Вы можете использовать комбинацию классов 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(); }