235 votes

Trouvez le dernier élément d'un tableau en utilisant une boucle foreach en PHP

Je suis en train d'écrire une requête SQL créateur à l'aide de certains paramètres. En Java, il est très facile de détecter le dernier élément d'un tableau à partir de l'intérieur de la boucle for par la simple vérification de l'actuelle position de tableau avec la longueur du tableau.

for(int i=0; i< arr.length;i++){

     boolean isLastElem = i== (arr.length -1) ? true : false;        

}

En PHP, ils ont non entier index pour accéder à des tableaux. Si vous devez parcourir un tableau à l'aide d'une boucle foreach. Cela devient problématique lorsque vous avez besoin pour prendre une décision (dans mon cas, pour ajouter ou/et les paramètres lors de la construction de la requête).

Je suis sûr qu'il y a de standard moyen de le faire.

Comment résoudre cela en PHP?

344voto

Richard Levasseur Points 5428

On dirait que vous voulez quelque chose comme ça:

 $numItems = count($arr);
$i = 0;
foreach($arr as $key=>$value) {
  if(++$i === $numItems) {
    echo "last index!";
  }
}    
 

Cela étant dit, vous n'avez pas à parcourir un "tableau" en utilisant foreach en php.

212voto

Jeremy Ruten Points 59989

Vous pouvez obtenir la valeur de la dernière clé du tableau en utilisant end(array_keys($array)) et la comparer à la clé actuelle:

 $last_key = end(array_keys($array));
foreach ($array as $key => $value) {
    if ($key == $last_key) {
        // last element
    } else {
        // not last element
    }
}
 

50voto

Trikks Points 257

pourquoi si compliqué?

 foreach($input as $key => $value) {
    $ret .= "$value";
    if (next($input)==true) $ret .= ",";
}
 

Cela ajoutera un, derrière chaque valeur sauf le dernier!

28voto

OIS Points 5566
 $toEnd = count($arr);
foreach($arr as $key=>$value) {
  if (0 === --$toEnd) {
    echo "last index! $value";
  }
}
 

ou le meilleur moyen est probablement ceci si vous exécutez toujours l'autre code de boucle

 foreach($arr as $key=>$value) {
  //something
}
echo "last index! $key => $value";
 

22voto

hakre Points 102271

Il y a déjà beaucoup de réponses, mais cela vaut la peine de se pencher sur les itérateurs, d'autant plus qu'il a été demandé de manière standard:

 $arr = range(1, 3);

$it = new CachingIterator(new ArrayIterator($arr));
foreach($it as $key => $value)
{
  if (!$it->hasNext()) echo 'Last:';
  echo $value, "\n";
}
 

Vous pourriez trouver quelque chose qui fonctionne plus flexible pour d'autres cas aussi.

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