web-dev-qa-db-fra.com

PHP - Prenez le premier élément en utilisant un foreach

Vous vous demandez quelle serait la bonne méthode pour obtenir la première itération sur une boucle foreach. Je veux faire quelque chose de différent à la première itération. 

Une condition est-elle notre meilleure option dans ces cas?

23
MEM

Oui, si vous ne pouvez pas parcourir l'objet d'une manière différente (une boucle for for normale), utilisez simplement une condition dans ce cas

$first = true;
foreach ( $obj as $value )
{
    if ( $first )
    {
        // do something
        $first = false;
    }
    else
    {
        // do something
    }

    // do something
}
68
poke

Encore plus élégant:

foreach($array as $index => $value) {
 if ($index == 0) {
      echo $array[$index];
 }
}

Cet exemple ne fonctionne que si vous utilisez le tableau intégré de PHP, ajoutez des fonctionnalités/fonction ou spécifiez manuellement les clés dans l'ordre numérique approprié.

Voici une approche qui ne ressemble pas aux autres solutions énumérées ici et qui devrait fonctionner via l’ordre naturel de tout tableau PHP.

$first = array_shift($array);
//do stuff with $first

foreach($array as $elem) {
 //do stuff with rest of array elements
}

array_unshift($array, $first);     //return first element to top
33
Klinky

Vous pouvez simplement ajouter un compteur au début, comme suit:

$i = 0;

foreach($arr as $a){
 if($i == 0) {
 //do ze business
 }
 //the rest
 $i++;
}
9
Russell Dias

J'ai vu cette solution sur un blog post dans mon ensemble de résultats de recherche qui l'a amené à apparaître et je l'ai trouvée plutôt élégante. Bien que peut-être un peu lourd sur le traitement.

foreach ($array as $element) 
{
    if ($element === reset($array))
        echo 'FIRST ELEMENT!';

    if ($element === end($array))
        echo 'LAST ELEMENT!';
}

Notez qu'il y a aussi un avertissement sur le post que cela ne fonctionnera que si les valeurs du tableau sont uniques. Si votre dernier élément est "world" et qu'un élément aléatoire au milieu est également "world", le dernier élément sera exécuté deux fois.

6
danielson317
first = true
foreach(...)
    if first
        do stuff
        first = false
3
dutt

hm

<?php
$i = 0;
foreach($ar as $sth) {
    if($i++ == 0) {
        // do something
    }
    // do something else
}

plus élégant.

2
janoliver

Cela fonctionne aussi

foreach($array as $element) {
    if ($element === reset($array))
        echo 'FIRST ELEMENT!';

    if ($element === end($array))
        echo 'LAST ELEMENT!';
}
2
omukiguy
foreach($array as $element) {
    if ($element === reset($array))
        echo 'FIRST ELEMENT!';

    if ($element === end($array))
        echo 'LAST ELEMENT!';
}
0
Mau Xanh Cua Linh