2009-08-29 5 views
1

Je sais comment faire ceci ... Je vais donner un exemple de code ci-dessous. Mais je ne peux pas secouer le sentiment qu'il y a une manière intelligente d'accomplir ce que je veux faire sans utiliser une variable comme $isfirstloop.Comment effectuer une action supplémentaire uniquement sur la première itération d'une boucle?

$isfirstloop = true; 
foreach($arrayname as $value) { 
if ($isfirstloop) { 
    dosomethingspecial(); 
    $isfirstloop = false; 
} 
dosomething(); 
} 

Est-il possible d'exécuter dosomethingspecial() uniquement sur la première boucle, tout en exécutant dosomething() sur chaque boucle, sans introduire une variable comme $isfirstloop?

Merci!

Répondre

4
foreach ($arr as $i => $val) 
{ 
    if ($i == 0) { doSomethingSpecial(); } // Only happens once. 
    doSomething(); // Happens every time. 
} 
+0

+1 Exactement comment je l'apprend, bien sûr, si c'est un tableau associatif, cela ne fonctionnerait pas, car vous obtiendriez la clé au lieu de l'index. –

+1

Vous devez supposer que le tableau est numéroté avec la première clé étant zéro. Considérons un tableau avec un élément 0 non défini. –

+0

Exactement ce que je cherchais. Cela semble si simple, mais je ne l'ai jamais trouvé. Merci beaucoup! – stalepretzel

0
$count = count($arr); 

for ($i = 0; $i < $count; $i++) { 
    if ($i == 0) { dosomethingspecial(); } 
    doSomething(); 
} 
+0

Idéal pour les tableaux ou les tableaux associés avec une numérotation non contiguë. –

7

Pardonnez-moi si je me manque quelque chose, mais pourquoi ne pas faire juste la chose que vous voulez avant que la boucle?

dosomethingspecial(); 
foreach($arrayname as $value) { 
dosomething(); 
} 
+1

Et si vous avez besoin du premier élément pour doSomethingSpecial(), vous pouvez utiliser par exemple. reset ($ arrayname) (si le tableau peut être réinitialisé avant la boucle) – VolkerK

+3

dosomethingspecial() sera toujours invoqué, peu importe si le tableau $ arrayname est rempli d'éléments ou non, je suppose qu'il veut au moins que cela soit invoqué si son peuplé au moins avec un élément. –

+0

Oui, si vous prenez en compte le commentaire de VolkerK. –

1

Hmm ... Vous pouvez reset le tableau, puis voir si vous êtes sur la première clé:

reset($a); foreach($a as $k => $v) { 
    if(key($a)==$k) doIt(); 
} 
0
$elem = reset($arrayname); 
dosomethingspecial(); 
while(($elem = next($arrayname)) !== FALSE) { 
    dosomething(); 
} 
0

Votre ne pas prendre toute la performance des méthodes alternatives. Votre méthode est très bien.