[PHP] utilisation du foreach
Fermé
okuni
Messages postés
1221
Date d'inscription
jeudi 4 septembre 2008
Statut
Membre
Dernière intervention
2 janvier 2014
-
4 oct. 2008 à 16:01
okuni Messages postés 1221 Date d'inscription jeudi 4 septembre 2008 Statut Membre Dernière intervention 2 janvier 2014 - 10 oct. 2008 à 19:47
okuni Messages postés 1221 Date d'inscription jeudi 4 septembre 2008 Statut Membre Dernière intervention 2 janvier 2014 - 10 oct. 2008 à 19:47
A voir également:
- [PHP] utilisation du foreach
- Notice d'utilisation - Guide
- Utilisation chromecast - Guide
- Easy php - Télécharger - Divers Web & Internet
- Votre compte a été désactivé pour violation de nos conditions d’utilisation - Guide
- La ressource demandée est en cours d'utilisation ✓ - Forum Logiciels
29 réponses
Groarh
Messages postés
682
Date d'inscription
vendredi 1 août 2008
Statut
Membre
Dernière intervention
28 juin 2015
185
7 oct. 2008 à 11:23
7 oct. 2008 à 11:23
Okuni,
ça m'a l'air un peu confus tout ça dans ta tête :P
Je vais reprendre à partir du bout de code que tu donnes dans le post n°12.
Alors, $donnees est un tableau contenant une ligne de la base de données. Comme tout tableau qui se respecte, il a un nombre d'éléments accessible via sa propriété length, c'est ce que tu demandais plus haut :
donnees.length est le nombre d'éléments du tableau. (je vais l'appeler n)
Pour passer le regexp à tous les éléments, il est donc nécessaire d'itérer sur tous les éléments : on part de 0 (le 1er élément) et on va jusqu'à n - 1 (le n-ième élément).
Ça va, tu suis ?
Là ça corrige déjà un problème : tu n'allais que jusqu'à 1.
Ensuite :
Là je corrige quoi ? > j'ai viré les guillemets ^^
Si tu mets des guillemets, PHP cherche dans le tableau une valeur portant la clé '$i' en toutes lettres, et pas le numéro porté par $i. Résultat : il ne trouve pas, il renvoie null et donc $element = null quand il arrive dans le regexp. Ensuite il fait un preg_replace sur ce null, et comme ça ne le dérange pas plus que ça, il ne déclenche pas de message d'erreur : il renvoie null lui aussi.
Tu suis toujours ? ^^
Enfin, d'après ce que j'ai compris, ton script va afficher les données à partir du tableau $donnees, qui a été modifié par le passage du regexp. Donc à la fin d'un tour de boucle, la valeur $element retourne dans $donnees[$i]. Eh oui, tu as mis aussi des guillemets ! Du coup il stocke la valeur dans une case du tableau portant la clé '$i' en toutes lettres, dont tu ne te sers pas après (puisque tu ne sais pas qu'elle existe :D)
Retire les guillemets et ça sera stocké au bon endroit ;)
Le script final :
Dis-moi si ça marche :P
ça m'a l'air un peu confus tout ça dans ta tête :P
Je vais reprendre à partir du bout de code que tu donnes dans le post n°12.
Alors, $donnees est un tableau contenant une ligne de la base de données. Comme tout tableau qui se respecte, il a un nombre d'éléments accessible via sa propriété length, c'est ce que tu demandais plus haut :
donnees.length est le nombre d'éléments du tableau. (je vais l'appeler n)
Pour passer le regexp à tous les éléments, il est donc nécessaire d'itérer sur tous les éléments : on part de 0 (le 1er élément) et on va jusqu'à n - 1 (le n-ième élément).
for ($i = 0; i <= donnees.length - 1; $i++)
Ça va, tu suis ?
Là ça corrige déjà un problème : tu n'allais que jusqu'à 1.
Ensuite :
$element = $donnees[$i];
Là je corrige quoi ? > j'ai viré les guillemets ^^
Si tu mets des guillemets, PHP cherche dans le tableau une valeur portant la clé '$i' en toutes lettres, et pas le numéro porté par $i. Résultat : il ne trouve pas, il renvoie null et donc $element = null quand il arrive dans le regexp. Ensuite il fait un preg_replace sur ce null, et comme ça ne le dérange pas plus que ça, il ne déclenche pas de message d'erreur : il renvoie null lui aussi.
Tu suis toujours ? ^^
Enfin, d'après ce que j'ai compris, ton script va afficher les données à partir du tableau $donnees, qui a été modifié par le passage du regexp. Donc à la fin d'un tour de boucle, la valeur $element retourne dans $donnees[$i]. Eh oui, tu as mis aussi des guillemets ! Du coup il stocke la valeur dans une case du tableau portant la clé '$i' en toutes lettres, dont tu ne te sers pas après (puisque tu ne sais pas qu'elle existe :D)
Retire les guillemets et ça sera stocké au bon endroit ;)
Le script final :
for ($i = 0; $i <= $donnees.length - 1; $i++ ) { $element = $donnees[$i]; include ('../includes/regex.php'); $donnees[$i] = $element; }
Dis-moi si ça marche :P
Stef60
Messages postés
251
Date d'inscription
jeudi 31 mai 2007
Statut
Membre
Dernière intervention
22 avril 2009
41
9 oct. 2008 à 11:10
9 oct. 2008 à 11:10
OK.
As-tu essayé avec cette synthaxe :
foreach ($donnees as &$element)
As-tu essayé avec cette synthaxe :
foreach ($donnees as &$element)
Groarh
Messages postés
682
Date d'inscription
vendredi 1 août 2008
Statut
Membre
Dernière intervention
28 juin 2015
185
9 oct. 2008 à 12:33
9 oct. 2008 à 12:33
Ouais, alors en fait c'est pas du tout $donnees.length() je m'écrase comme une crotte en confondant avec Javascript. Mais bon, personne est là pour me récupérer hein, vous valez pas mieux que moi :P
Alors la longueur du tableau en php c'est :
Sinon l'idée de Stef60 est pas mauvaise, passer par référence, faut voir si ça marche.
Alors la longueur du tableau en php c'est :
count($donnees)
Sinon l'idée de Stef60 est pas mauvaise, passer par référence, faut voir si ça marche.
hani_
Messages postés
333
Date d'inscription
lundi 22 septembre 2008
Statut
Membre
Dernière intervention
18 novembre 2009
20
9 oct. 2008 à 12:39
9 oct. 2008 à 12:39
$donnees.length retourne un nombre entier ayant pour valeur la taille du tableau...(et donc le nombre de données...)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
hani_
Messages postés
333
Date d'inscription
lundi 22 septembre 2008
Statut
Membre
Dernière intervention
18 novembre 2009
20
9 oct. 2008 à 12:58
9 oct. 2008 à 12:58
La question était a quoi sert $donnees.length je n'ai jamais dit qu'il s'agissait de php cela se rapprocherais plutôt du js encore que le $ n'a rien a voir et qu'il manque des parenthèses...
Alain_42
Messages postés
5361
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
894
9 oct. 2008 à 13:07
9 oct. 2008 à 13:07
je t'ai donné une solution, l'as tu au moins testée ?
okuni
Messages postés
1221
Date d'inscription
jeudi 4 septembre 2008
Statut
Membre
Dernière intervention
2 janvier 2014
126
9 oct. 2008 à 19:02
9 oct. 2008 à 19:02
ok merci beacoup mais je trouve que sa complique fort le code. :(
Alain_42
Messages postés
5361
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
894
9 oct. 2008 à 19:48
9 oct. 2008 à 19:48
Comment ça ça complique, il faut savoir ce que l'on veut.
C'est surtout la partie affichage qui l'a alourdie.
@lain
C'est surtout la partie affichage qui l'a alourdie.
@lain
okuni
Messages postés
1221
Date d'inscription
jeudi 4 septembre 2008
Statut
Membre
Dernière intervention
2 janvier 2014
126
>
Alain_42
Messages postés
5361
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
10 oct. 2008 à 19:47
10 oct. 2008 à 19:47
merci quand même :)
J'ai appris des trucs en plus :D
J'ai appris des trucs en plus :D
Groarh
Messages postés
682
Date d'inscription
vendredi 1 août 2008
Statut
Membre
Dernière intervention
28 juin 2015
185
4 oct. 2008 à 16:13
4 oct. 2008 à 16:13
Vérifie que ton serveur gère le php 5 par défaut.
Sinon, il faut mettre l'extension .php5 à ton script.
Sinon, il faut mettre l'extension .php5 à ton script.
okuni
Messages postés
1221
Date d'inscription
jeudi 4 septembre 2008
Statut
Membre
Dernière intervention
2 janvier 2014
126
4 oct. 2008 à 16:23
4 oct. 2008 à 16:23
Foreach ne fonctionne que sous PHP5 ?
Groarh
Messages postés
682
Date d'inscription
vendredi 1 août 2008
Statut
Membre
Dernière intervention
28 juin 2015
185
4 oct. 2008 à 17:09
4 oct. 2008 à 17:09
Ben oui :)
okuni
Messages postés
1221
Date d'inscription
jeudi 4 septembre 2008
Statut
Membre
Dernière intervention
2 janvier 2014
126
5 oct. 2008 à 16:53
5 oct. 2008 à 16:53
ok
mais même quand je met l'extension .php5 celà ne fonctionne pas. Cela signifie que mon hébergeur ne gère pas PHP5?
mais même quand je met l'extension .php5 celà ne fonctionne pas. Cela signifie que mon hébergeur ne gère pas PHP5?
Groarh
Messages postés
682
Date d'inscription
vendredi 1 août 2008
Statut
Membre
Dernière intervention
28 juin 2015
185
6 oct. 2008 à 10:11
6 oct. 2008 à 10:11
C'est quoi ton hébergeur ? J'ai envie de dire, c'est du carton-pâte...
Pour être fixé utilise phpinfo() dans un fichier d'extension .php5, et tu sauras.
P.S. Même, eh oui même Free est passé au php 5 !!! Change d'hébergeur, conseil d'ami ;)
Pour être fixé utilise phpinfo() dans un fichier d'extension .php5, et tu sauras.
P.S. Même, eh oui même Free est passé au php 5 !!! Change d'hébergeur, conseil d'ami ;)
okuni
Messages postés
1221
Date d'inscription
jeudi 4 septembre 2008
Statut
Membre
Dernière intervention
2 janvier 2014
126
6 oct. 2008 à 19:28
6 oct. 2008 à 19:28
Ben justement, je suis chez Free :p
Groarh
Messages postés
682
Date d'inscription
vendredi 1 août 2008
Statut
Membre
Dernière intervention
28 juin 2015
185
6 oct. 2008 à 19:35
6 oct. 2008 à 19:35
Ah. *gros blanc*
Eh bien, change de boucle... ^^
Moi aussi je suis chez Free mais comme je n'ai découvert le foreach que récemment, je faisais à l'ancienne :
Et tant que j'y suis, c'est pas un problème d'include ? J'ai toujours des emmerdes pas possibles avec cette histoire de chemin d'include que Free ne permet pas de modifier...
Eh bien, change de boucle... ^^
Moi aussi je suis chez Free mais comme je n'ai découvert le foreach que récemment, je faisais à l'ancienne :
for ($i = 0; i <= $donnees.length - 1; i++) { $element = $donnees[$i]; include('../includes/regex.php'); }
Et tant que j'y suis, c'est pas un problème d'include ? J'ai toujours des emmerdes pas possibles avec cette histoire de chemin d'include que Free ne permet pas de modifier...
okuni
Messages postés
1221
Date d'inscription
jeudi 4 septembre 2008
Statut
Membre
Dernière intervention
2 janvier 2014
126
6 oct. 2008 à 20:38
6 oct. 2008 à 20:38
ok merci, je vais tester ce code ce soir.
$donnees.length est égal a quoi?
et non c'est pas un problème d'includes même si parfois j'en ai lol
mais le seul problème que j'ai eu avec les includes sur Free c'est avec un lien absolu (je sais plus je pense; un lien complet quoi :p)
$donnees.length est égal a quoi?
et non c'est pas un problème d'includes même si parfois j'en ai lol
mais le seul problème que j'ai eu avec les includes sur Free c'est avec un lien absolu (je sais plus je pense; un lien complet quoi :p)
Dr Zoidberg
Messages postés
529
Date d'inscription
jeudi 28 juin 2007
Statut
Membre
Dernière intervention
12 juin 2015
100
6 oct. 2008 à 21:32
6 oct. 2008 à 21:32
Pour info foreach existe depuis PHP4
https://www.php.net/manual/en/control-structures.foreach.php
https://www.php.net/manual/en/control-structures.foreach.php
okuni
Messages postés
1221
Date d'inscription
jeudi 4 septembre 2008
Statut
Membre
Dernière intervention
2 janvier 2014
126
6 oct. 2008 à 21:40
6 oct. 2008 à 21:40
Merci pour l'info.
Mais s'a n'explique pas pourquoi mon code ne marche pas.
Mais s'a n'explique pas pourquoi mon code ne marche pas.
Stef60
Messages postés
251
Date d'inscription
jeudi 31 mai 2007
Statut
Membre
Dernière intervention
22 avril 2009
41
6 oct. 2008 à 21:55
6 oct. 2008 à 21:55
bonsoir,
tu obtiens une erreur ?
On peux avoir un aperçu du fichier regex.php ?
tu obtiens une erreur ?
On peux avoir un aperçu du fichier regex.php ?
okuni
Messages postés
1221
Date d'inscription
jeudi 4 septembre 2008
Statut
Membre
Dernière intervention
2 janvier 2014
126
6 oct. 2008 à 22:11
6 oct. 2008 à 22:11
Non aucun message d'erreur.
voila le code (l'autre version :p)
mais ce code ne fonctionne pas.
voici le regex mais j'ai essayé avec ce qui suit et tout marche donc ce n'est pas ma page de regex. (enfin, je pense :p)
ma page regex :
ps : commentsamarche.com transforme les [ et ] donc le code est un peu moins visibles :s
voila le code (l'autre version :p)
for ($i = 0; $i <= 1; $i++ ) { $element = $donnees['$i']; include ('../includes/regex.php'); $donnees['$i'] = $element; }
mais ce code ne fonctionne pas.
voici le regex mais j'ai essayé avec ce qui suit et tout marche donc ce n'est pas ma page de regex. (enfin, je pense :p)
$element = $donnees['comment']; include ('../includes/regex.php'); $donnees['comment'] = $element;
ma page regex :
$element = preg_replace('#\[b\](.+)\[/b\]#isU', '<strong>$1</strong>', $element);//gras $element = preg_replace('#\[i\](.+)\[/i\]#isU', '<em>$1</em>', $element);//italique $element = preg_replace('#\[u\](.+)\[/u\]#isU', '<u>$1</u>', $element);//souligné $element = preg_replace('#\[q\](.+)\[/q\]#isU', '<q>$1</q>', $element);//citation $element = preg_replace('#\[center\](.+)\[/center\]#isU', '<div style="text-align:center">$1</div>', $element);//centré $element = preg_replace('#\[color=(red|green|blue|yellow|purple|olive)\](.+)\[/color\]#isU', '<span style="color:$1">$2</span>', $element);//couleur $element = preg_replace('#\[url=http://(.+)\](.+)\[/url\]+#isU', '<a href="http://$1">$2</a>', $element);//lien $element = preg_replace('#\[url\]http://(.+)\[/url\]+#isU', '<a href="http://$1">$1</a>', $element);//lien $element = preg_replace('#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#isU', '<a href="mailto:$0">$0</a>', $element);//mail $element = preg_replace('#\[img\](.+)\[/img\]#isU', '<img src="$1" alt="$1" />', $element);//image //regex des smileys $element = preg_replace('#:D#isU', ' <img src="../images/smileys/biggrin.gif" alt=":D" /> ', $element); $element = preg_replace('#XD#isU', ' <img src="../images/smileys/XD.png" alt="XD" /> ', $element); $element = preg_replace('#:\)#isU', ' <img src="../images/smileys/smile.gif" alt=":)" /> ', $element); $element = preg_replace('#:\(#isU', ' <img src="../images/smileys/sad.gif" alt=":(" /> ', $element); $element = preg_replace('#:cool:#isU', ' <img src="../images/smileys/cool.gif" alt=":cool:" /> ', $element); $element = preg_replace('#:o#isU', ' <img src="../images/smileys/ohmy.gif" alt=":o" /> ', $element); $element = preg_replace('#Zz#isU', ' <img src="../images/smileys/sleep.gif" alt="Zz" /> ', $element); $element = preg_replace('#:p#isU', ' <img src="../images/smileys/tongue.gif" alt=":p" /> ', $element); $element = preg_replace('#;\)#isU', ' <img src="../images/smileys/wink.gif" alt=";)" /> ', $element); $element = preg_replace('#\^\^#isU', ' <img src="../images/smileys/happy.gif" alt="^^" /> ', $element);
ps : commentsamarche.com transforme les [ et ] donc le code est un peu moins visibles :s
Stef60
Messages postés
251
Date d'inscription
jeudi 31 mai 2007
Statut
Membre
Dernière intervention
22 avril 2009
41
6 oct. 2008 à 22:17
6 oct. 2008 à 22:17
Tu dis : ca ne fonctionne pas.
Tu obtiens quoi ? une erreur ? rien qui s'affiche ?
Ca pourrait donner une piste ;-)
Tu obtiens quoi ? une erreur ? rien qui s'affiche ?
Ca pourrait donner une piste ;-)
okuni
Messages postés
1221
Date d'inscription
jeudi 4 septembre 2008
Statut
Membre
Dernière intervention
2 janvier 2014
126
6 oct. 2008 à 22:18
6 oct. 2008 à 22:18
oui déso. j'ai aucun message d'erreur mais toutes mes données s'affiche correctement.