Question

Je boucle en boucle dans un tableau associatif avec un foreach. J'aimerais pouvoir vérifier si la paire valeur / clé traitée est la dernière pour pouvoir lui accorder un traitement spécial. Des idées comment je peux le faire de la meilleure façon?

foreach ($kvarr as $key => $value){
   // I'd like to be able to check here if this key value pair is the last
   // so I can give it special treatment
}
Était-ce utile?

La solution

En supposant que vous ne modifiez pas le tableau en effectuant une itération, vous pouvez conserver un compteur qui diminue dans la boucle et une fois qu'il atteint 0, vous gérez le dernier:

<?php
$counter = count($kvarr);
foreach ($kvarr as $key => $value)
{
    --$counter;
    if (!$counter)
    {
        // deal with the last element
    }
}
?>

Autres conseils

Aussi simple que cela, exempt de pions et autres "hacks".

foreach ($array as $key => $value) {

   // your stuff

   if (next($array) === false) {
      // this is the last iteration
   }
}

Notez que vous devez utiliser === , car la fonction next () peut renvoyer une valeur non booléenne que renvoie . false , tel que 0 ou """ (chaîne vide).

nous n'avons pas besoin de parcourir le tableau avec foreach, nous pouvons utiliser les fonctions php end (), key () et current () pour obtenir le dernier élément et obtenir sa clé + valeur.

<?php

$a = Array(
  "fruit" => "apple",
  "car" => "camaro",
  "computer" => "commodore"
);

// --- go to the last element of the array & get the key + value --- 
end($a); 
$key = key($a);
$value = current($a);

echo "Last item: ".$key." => ".$value."\n";

?>

Si vous voulez vérifier cela dans l'itération, la fonction end () peut toujours être utile:

foreach ($a as $key => $value) {
    if ($value == end($a)) {
      // this is the last element
    }
}

Il existe de nombreuses façons de le faire, comme le montrent sans doute d’autres réponses. Mais je suggérerais d'apprendre SPL et son CachingIterator . Voici un exemple:

<?php

$array = array('first', 'second', 'third');

$object = new CachingIterator(new ArrayIterator($array));
foreach($object as $value) {
    print $value;

    if (!$object->hasNext()) {
        print "<-- that was the last one";
    }
}

C’est plus verbeux qu’un simple foreach, mais pas tant que ça. Et tous les différents itérateurs SPL vous ouvrent un nouveau monde, une fois que vous les avez appris :) Voici un bon tutoriel.

Vous pouvez utiliser les fonctions de traversée de pointeurs de tableaux (en particulier suivant ) pour déterminer s’il existe un autre élément après le dernier:

$value = reset($kvarr);
do
{
  $key = key($kvarr);
  // Do stuff

  if (($value = next($kvarr)) === FALSE)
  {
    // There is no next element, so this is the last one.
  }
}
while ($value !== FALSE)

Notez que cette méthode ne fonctionnera pas si votre tableau contient des éléments dont la valeur est FALSE , et vous devrez gérer le dernier élément après avoir effectué votre corps de boucle habituel (car le pointeur du tableau est avancé en appelant next ) ou bien mémoriser la valeur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top