PHP: как пропустить последний элемент в цикле foreach [дубликат]

этот вопрос уже есть ответ здесь:

У меня есть массив объектов, любой массив в PHP. Как пропустить последний элемент в итерации foreach?

5 ответов


используйте переменную, чтобы отслеживать, сколько элементов было повторено до сих пор и сократить цикл, когда он достигнет конца:

$count = count($array);

foreach ($array as $key => $val) {
    if (--$count <= 0) {
        break;
    }

    echo "$key = $val\n";
}

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

foreach (array_slice($array, 0, count($array) - 1) as $key => $val) {
    echo "$key = $val\n";
}

есть различные способы сделать это.

Если Ваш массив является последовательно нулевым индексированным массивом, вы можете сделать:

for( $i = 0, $ilen = count( $array ) - 1; $i < $ilen; $i++ )
{
    $value = $array[ $i ];

    /* do something with $value */
}

Если Ваш массив является ассоциативным массивом или иным образом не последовательно нулевым индексированным, вы можете сделать:

$i = 0;
$ilen = count( $array );
foreach( $array as $key => $value )
{
    if( ++$i == $ilen ) break;

    /* do something with $value */
}

Если вы не хотите удалять последнюю запись массива с помощью pop, вы можете пропустить ее следующим образом

$array = array('v1','v2','v3',...)

$counter = 1;

foreach($array as $value)
{
    //do your thing in loop

    if($counter == count($array)) continue; // this will skip to next iteration if last element encountered.
    $counter++;
}

$count = count($array);
$i=0;
foreach ($arr as &$value) 
{
    $i++;
    if($i==($count-1))
    {
      echo 'skip';
    }
    else
    {
      echo $value;
    }
}

то, что вы пытаетесь сделать, победит цель цикла foreach. Он предназначен для петли через весь массив и сделать нашу работу легкой.

например: вы можете получить размер массива, используя графа функция в php, а затем может использовать для цикла и установить предел arraysize-2, поэтому последний массив будет опущен