Найти последний элемент массива при использовании цикла foreach в PHP - PullRequest
189 голосов
/ 20 марта 2009

Я пишу создатель SQL-запроса, используя некоторые параметры. В Java очень просто обнаружить последний элемент массива из цикла for, просто проверяя текущую позицию массива с длиной массива.

for(int i=0; i< arr.length;i++){
     boolean isLastElem = i== (arr.length -1) ? true : false;        
}

В PHP они имеют нецелые индексы для доступа к массивам. Поэтому вы должны перебирать массив, используя цикл foreach. Это становится проблематичным, когда вам нужно принять какое-то решение (в моем случае добавить или / и параметр при построении запроса)

Я уверен, что должен быть какой-то стандартный способ сделать это.

Как вы решаете это в PHP?

Ответы [ 31 ]

3 голосов
/ 21 апреля 2012

У меня есть сильное ощущение, что в корне этой "проблемы XY" ОП нужна была просто функция implode().

3 голосов
/ 06 апреля 2013

Поскольку ваше намерение найти массив EOF только для клея. Познакомьтесь с нижеприведенной тактикой. Вам не нужно требовать EOF:

$given_array = array('column1'=>'value1',
                     'column2'=>'value2',
                     'column3'=>'value3');

$glue = '';
foreach($given_array as $column_name=>$value){
    $where .= " $glue $column_name = $value"; //appending the glue
    $glue   = 'AND';
}
echo $where;

о / р:

column1 = value1 AND column2 = value2 AND column3 = value3
3 голосов
/ 20 марта 2009

Вы все еще можете использовать этот метод с ассоциативными массивами:

$keys = array_keys($array);
for ($i = 0, $l = count($array); $i < $l; ++$i) {
    $key = $array[$i];
    $value = $array[$key];
    $isLastItem = ($i == ($l - 1));
    // do stuff
}

// or this way...

$i = 0;
$l = count($array);
foreach ($array as $key => $value) {
    $isLastItem = ($i == ($l - 1));
    // do stuff
    ++$i;
}
2 голосов
/ 22 сентября 2011

Похоже, вы хотите что-то вроде этого:

$array = array(
    'First',
    'Second',
    'Third',
    'Last'
);

foreach($array as $key => $value)
{
    if(end($array) === $value)
    {
       echo "last index!" . $value;
    }
}
1 голос
/ 08 июня 2010

Как насчет использования "конца"? http://php.net/manual/en/function.end.php

1 голос
/ 30 марта 2009

Вы также можете сделать что-то вроде этого:

end( $elements );
$endKey = key($elements);
foreach ($elements as $key => $value)
{
     if ($key == $endKey) // -- this is the last item
     {
          // do something
     }

     // more code
}
1 голос
/ 20 марта 2009

вы можете сделать подсчет ().

for ($i=0;$i<count(arr);$i++){
    $i == count(arr)-1 ? true : false;
}

или если вы ищете ТОЛЬКО последний элемент, вы можете использовать end ().

end(arr);

возвращает только последний элемент.

и, как оказалось, вы можете индексировать php-массивы целыми числами. Это совершенно доволен

arr[1];
1 голос
/ 16 июля 2013

Мне нравится следующее, потому что я чувствую, что это довольно аккуратно Давайте предположим, что мы создаем строку с разделителями между всеми элементами: например, а, б, с

$first = true;
foreach ( $items as $item ) {
    $str = ($first)?$first=false:", ".$item;
}
1 голос
/ 23 сентября 2018
foreach ($array as $key => $value) {

  $class = ( $key !== count( $array ) -1 ) ? " class='not-last'" : " class='last'";

  echo "<div{$class}>";
  echo "$value['the_title']";
  echo "</div>";

}

Ссылка

0 голосов
/ 26 декабря 2018

Не добавляйте запятую после последнего значения:

Массив:

$data = ['lorem', 'ipsum', 'dolor', 'sit', 'amet'];

Функция:

$result = "";
foreach($data as $value) {
    $resut .= (next($data)) ? "$value, " : $value;
}

Результат:

print $result;

lorem, ipsum, dolor, sit, amet

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