в foreach isLastItem () существует? - PullRequest
       5

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

8 голосов
/ 09 февраля 2011

Используя обычный цикл 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?

Ответы [ 8 ]

21 голосов
/ 09 февраля 2011

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

$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
}
12 голосов
/ 09 февраля 2011

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

$iter = new CachingIterator(new ArrayIterator($arr));
foreach ($iter as $value) {
    $last_iteration = !$iter->hasNext();
}
1 голос
/ 27 января 2015

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

$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(", ");
    }
}
1 голос
/ 09 февраля 2011
end($array);
$lastKey = key($array);
foreach($array as $key => $value) {
   if ($key === $lastKey) {
      // do something endish
   }
}
1 голос
/ 09 февраля 2011

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

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

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

1 голос
/ 09 февраля 2011

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

1 голос
/ 09 февраля 2011

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

0 голосов
/ 04 апреля 2016

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

См .:

$arr = array("Banana","Abacaxi","Abacate","Morango");

$iter = new ArrayIterator($arr);

while($iter->valid()){

    echo $iter->key()." - ".$iter->current()."<br/>";

    $iter->next();

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...