2010-10-18 5 views
22

Vous vous demandez ce qui serait une 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.PHP - Saisir le premier élément en utilisant un foreach

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

Répondre

63

Oui, si vous n'êtes pas en mesure de passer par l'objet d'une autre manière (une normale boucle), il suffit d'utiliser un conditionnel dans ce cas:

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

    // do something 
} 
+1

+1 J'aime ce mieux que le mien. –

+0

J'avais un premier élément "naturel", donc je l'utilise sur le conditionnel. ;) Mais j'apprécie vraiment cette idée. Merci beaucoup. – MEM

+0

c'est un truc génial! mais est-ce qu'il y a une fonction pour ça? – Cody

8

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

$i = 0; 

foreach($arr as $a){ 
if($i == 0) { 
//do ze business 
} 
//the rest 
$i++; 
} 
2
first = true 
foreach(...) 
    if first 
     do stuff 
     first = false 
0

hm

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

plus élégant.

+0

Est-ce que cela fonctionnera réellement? Est-ce que $ i sera vraiment incrémenté après l'évaluation de la déclaration? –

+3

@yan Eh bien, l'opérateur * post-increment * fonctionne [comme décrit] (http://php.net/manual/fr/language.operators.increment.php), ou PHP est terriblement cassé ... – deceze

+0

oui . $ i ++ est évalué après l'expression, ++ $ i serait évalué en premier. – janoliver

29

eleganterer Même Morer:

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

Cet exemple ne fonctionne que si vous utilisez le tableau intégré PHP/fonctions append fonction ou spécifier manuellement les clés dans l'ordre numérique approprié.

Voici une approche qui ne ressemble pas aux autres listés ici qui devraient fonctionner via l'ordre naturel de n'importe quel 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 
+1

Cela ne fonctionnera pas avec les tableaux associatifs –

+0

@NathanBell Techniquement, tous les tableaux sont associatifs en PHP. Cet exemple ne fonctionne que si vous utilisez les fonctionnalités/fonctions d'ajout de tableaux intégrés de PHP ou si vous spécifiez manuellement les clés dans l'ordre numérique approprié. – Klinky

+0

merci beau travail – deemi

4

je vis cette solution sur un blog post dans mon ensemble de résultats de recherche qui a fait monter ce poste et je pensais qu'il était plutôt élégant. 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 "monde" et qu'un élément aléatoire au milieu est également "monde", le dernier élément s'exécutera deux fois.

1

Ceci est également fonctionne

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

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