Найти последний элемент массива при использовании цикла 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 ]

0 голосов
/ 10 декабря 2009

Вот еще один способ сделать это:

$arr = range(1, 10);

$end = end($arr);
reset($arr);

while( list($k, $v) = each($arr) )
{
    if( $n == $end )
    {
        echo 'last!';
    }
    else
    {
        echo sprintf('%s ', $v);
    }
}
0 голосов
/ 22 октября 2016

Вот мое решение: Просто получите счетчик вашего массива, минус 1 (так как они начинаются с 0).

$lastkey = count($array) - 1;
foreach($array as $k=>$a){
    if($k==$lastkey){
        /*do something*/
    }
}
0 голосов
/ 08 апреля 2010

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

   $rev_array = array_reverse($array);

   echo array_pop($rev_array);
0 голосов
/ 05 ноября 2010

Вы также можете попробовать сделать этот запрос ... показанным здесь с INSERT

<?php
 $week=array('one'=>'monday','two'=>'tuesday','three'=>'wednesday','four'=>'thursday','five'=>'friday','six'=>'saturday','seven'=>'sunday');
 $keys = array_keys($week);
 $string = "INSERT INTO my_table ('";
 $string .= implode("','", $keys);
 $string .= "') VALUES ('";
 $string .= implode("','", $week);
 $string .= "');";
 echo $string;
?>
0 голосов
/ 21 ноября 2012
<?php foreach($have_comments as $key => $page_comment): ?>
    <?php echo $page_comment;?>
    <?php if($key+1<count($have_comments)): ?> 
        <?php echo ', '; ?>
    <?php endif;?>
<?php endforeach;?>
0 голосов
/ 09 августа 2011

Для сценариев, генерирующих SQL-запросы, или для любых других операций, выполняющих различные действия для первого или последнего элемента, гораздо быстрее (почти в два раза быстрее) избежать ненужных проверок переменных.

Текущее принятое решение использует цикл и проверку в цикле, которые будут выполняться каждые_единки_терации, правильный (быстрый) способ сделать это:

$numItems = count($arr);
$i=0;
$firstitem=$arr[0];
$i++;
while($i<$numItems-1){
    $some_item=$arr[$i];
    $i++;
}
$last_item=$arr[$i];
$i++;

Небольшой домашний тест показал следующее:

test1: 100000 прогонов модели Morg

время: 1869,3430423737 миллисекунд

test2: 100000 прогонов модели, если последний

время: 3235,6359958649 миллисекунд

0 голосов
/ 16 августа 2012

Вы можете непосредственно получить последний индекс по:

$numItems = count($arr);

echo $arr[$numItems-1];

0 голосов
/ 13 февраля 2019

Попробуйте это простое решение

$test = ['a' => 1, 'b' => 2, 'c' => 3];

$last_array_value = end($test);

foreach ($test as $key => $value) {
   if ($value === $last_array_value) {
      echo $value; // display the last value  
   } else {
     echo $value; // display the values that are not last elements 
   }
}
0 голосов
/ 05 апреля 2012

Я лично использую такую ​​конструкцию, которая позволяет легко использовать элементы html

  • : просто изменить равенство для другого свойства ...

    Массив не может содержать ложные элементы, но все остальные элементы, которые приводятся к ложному логическому значению.

    $table = array( 'a' , 'b', 'c');
    $it = reset($table);
    while( $it !== false ) {
        echo 'all loops';echo $it;
        $nextIt = next($table);
        if ($nextIt === false || $nextIt === $it) {
                echo 'last loop or two identical items';
        }
        $it = $nextIt;
    }
    
0 голосов
/ 13 февраля 2019

Более простая функция end() - это встроенная функция в PHP, которая используется для поиска последнего элемента данного массива. Функция end () изменяет внутренний указатель массива, чтобы он указывал на последний элемент, и возвращает значение последнего элемента.

Ниже приведен пример с нецелым индексом:

<?php
    $arr = array(
            'first' => 
                array('id' => 1, 'label' => 'one'), 
            'second' => 
                array('id' => 2, 'label' => 'two'), 
            'last' => 
                array('id' => 9, 'label' => 'nine')
        );
    $lastIndexArr = end($arr);
    print_r($lastIndexArr);

Проверьте здесь последний массив в качестве вывода.

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