2011-10-23 3 views
1

Actuellement, je fais ceci:Echo dans une itération de tableau remplace l'écho précédent (PHP)

$lines = file('data/index'); 
    foreach ($lines as $value) 
    list($title, $location) = explode("|", $value); 
    echo '<div id="entry"><a href="'.$location.'">'.$title.'</a></div>'; 

Et le contenu de data/index est:

This is a test post|http://google.com 
Another test post|http://google.com 

Cependant, il imprime uniquement la dernière ligne de ce fichier. Presque comme chaque "écho" est remplacé par un nouveau. Je ne fais évidemment pas ça correctement. Pourquoi cela ne fonctionne-t-il pas et comment puis-je le faire fonctionner comme je le souhaite?

+1

laissez-moi deviner, vous venez d'un fond de python? –

+2

@code_burgar Dans ce cas son indentation aurait été juste;) – NikiC

Répondre

6

Dans votre code, seule la troisième ligne fait partie de la boucle. Si vous voulez avoir les deux déclarations dans la boucle, vous devez créer un bloc:

foreach ($lines as $value) { 
    list($title, $location) = explode("|", $value); 
    echo '<div id="entry"><a href="'.$location.'">'.$title.'</a></div>'; 
} 

En outre, echo HTML avec PHP ing doit être évitée. Vous devriez intégrer PHP dans votre HTML à la place. Il rend votre code, en particulier votre balisage HTML plus facile à maintenir et est moins sujette aux erreurs.

Référence: foreach

+0

Merci, je ne peux pas croire que j'ai raté ça. Je suis nouveau à PHP – n0pe

+0

@MaxMackie: Ce problème n'est pas spécifique à PHP. C'est la même chose dans la plupart des autres langages "en C". –

+5

Je ne suis pas d'accord sur l'écho HTML étant mauvais style en soi. –

4

Vous avez besoin d'accolades {}. Sans eux, seule la ligne suivante est itérée après une boucle. Ainsi, seule votre liste() est itérée.

foreach ($lines as $value) 
{ // <-- Important 
    list($title, $location) = explode("|", $value); 
    echo '<div id="entry"><a href="'.$location.'">'.$title.'</a></div>'; 
} // <-- Important 
+0

la prochaine * déclaration *. cela peut être sur la même ligne si vous tapez un point-virgule après le) par erreur! – toon81

3

Vous avez:

foreach ($lines as $value) 
list($title, $location) = explode("|", $value); 
echo '<div id="entry"><a href="'.$location.'">'.$title.'</a></div>'; 

Seule la partie de la liste est dans la boucle foreach. Vous avez besoin de:

foreach ($lines as $value) 
{ 
    list($title, $location) = explode("|", $value); 
    echo '<div id="entry"><a href="'.$location.'">'.$title.'</a></div>'; 
} 
+0

ack! n'a pas vu les autres réponses jusqu'à maintenant. _edit: +1 pour la réponse de Felix King_ – toon81