89 votes

Vérification pendant l'itération du tableau, si l'élément actuel est le dernier élément

S'il vous plaît aidez-moi à traduire ce pseudo-code en vrai code php :

  foreach ($arr as $k => $v)
    if ( THIS IS NOT THE LAST ELEMENT IN THE ARRAY)
        doSomething();

Edit : le tableau peut avoir des clés numériques ou de chaîne

27voto

Richard Merchant Points 169

Cela fait toujours l'affaire pour moi

 foreach($array as $key => $value) {
   if (end(array_keys($array)) == $key)
       // Last key reached
}

Modifier 30/04/15

 $last_key = end(array_keys($array));
reset($array);

foreach($array as $key => $value) {
  if ( $key == $last_key)
      // Last key reached
}

Pour éviter l'avertissement E_STRICT mentionné par @Warren Sergent

 $array_keys = array_keys($array);
$last_key = end($array_keys);

15voto

onteria_ Points 18947
$myarray = array(
  'test1' => 'foo',
  'test2' => 'bar',
  'test3' => 'baz',
  'test4' => 'waldo'
);

$myarray2 = array(
'foo',
'bar',
'baz',
'waldo'
);

// Get the last array_key
$last = array_pop(array_keys($myarray));
foreach($myarray as $key => $value) {
  if($key != $last) {
    echo "$key -> $value\n";
  }
}

// Get the last array_key
$last = array_pop(array_keys($myarray2));
foreach($myarray2 as $key => $value) {
  if($key != $last) {
    echo "$key -> $value\n";
  }
}

Étant donné que array_pop fonctionne sur le tableau temporaire créé par array_keys il ne modifie pas du tout le tableau d'origine.

 $ php test.php
test1 -> foo
test2 -> bar
test3 -> baz
0 -> foo
1 -> bar
2 -> baz

7voto

PreciousFocus Points 61

Pourquoi pas cette méthode très simple :

 $i = 0; //a counter to track which element we are at
foreach($array as $index => $value) {
    $i++;
    if( $i == sizeof($array) ){
        //we are at the last element of the array
    }
}

3voto

UniFreak Points 86

Je sais que c'est ancien et que l'utilisation de l'itérateur SPL est peut-être juste exagérée, mais de toute façon, une autre solution ici :

 $ary = array(1, 2, 3, 4, 'last');
$ary = new ArrayIterator($ary);
$ary = new CachingIterator($ary);
foreach ($ary as $each) {
    if (!$ary->hasNext()) { // we chain ArrayIterator and CachingIterator
                            // just to use this `hasNext()` method to see
                            // if this is the last element
       echo $each;
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X