[PHP] Condition boucle while ?
Résolu/Fermé
KunGu
Messages postés
1169
Date d'inscription
vendredi 7 septembre 2007
Statut
Membre
Dernière intervention
17 mars 2013
-
2 juin 2011 à 16:13
KunGu Messages postés 1169 Date d'inscription vendredi 7 septembre 2007 Statut Membre Dernière intervention 17 mars 2013 - 5 juin 2011 à 01:02
KunGu Messages postés 1169 Date d'inscription vendredi 7 septembre 2007 Statut Membre Dernière intervention 17 mars 2013 - 5 juin 2011 à 01:02
5 réponses
mpmp93
Messages postés
6648
Date d'inscription
mercredi 13 avril 2011
Statut
Membre
Dernière intervention
28 septembre 2015
1 339
3 juin 2011 à 09:41
3 juin 2011 à 09:41
Bonjour,
Pourquoi toujours des while et des for pour vos boucles sur un array???
Il y a une fonction qu'elle est très bien: foreach
foreach($_POST AS $key => $val) {
$test3 = stripos($val, $atester3, $offset); //Vérification présence atester3
echo $test3;
// ....ici le reste de votre traitement...
}
Et là aucune prise de tête pour savoir comment la boucle s'achève. S'il y a 1 élément dans $_POST, la boucle s'exécute 1x, s'il y en a 500, la boucle tournera 500x...
A+
Pourquoi toujours des while et des for pour vos boucles sur un array???
Il y a une fonction qu'elle est très bien: foreach
foreach($_POST AS $key => $val) {
$test3 = stripos($val, $atester3, $offset); //Vérification présence atester3
echo $test3;
// ....ici le reste de votre traitement...
}
Et là aucune prise de tête pour savoir comment la boucle s'achève. S'il y a 1 élément dans $_POST, la boucle s'exécute 1x, s'il y en a 500, la boucle tournera 500x...
A+
coeus
Messages postés
3021
Date d'inscription
samedi 13 janvier 2007
Statut
Membre
Dernière intervention
19 juin 2013
119
2 juin 2011 à 16:32
2 juin 2011 à 16:32
Salut !
Ouais je comprends un peu mal comment ton script tourne, mais une chose de sûre : ta boucle est sensée se répéter tant que $test3 est un nombre. Il peut rester un nombre pendant longtemps !!! :-P
Si tu veux passer à travers les valeurs de ton $_POST['urls'] (j'assume que c'est un array ?) pourquoi ne pas utiliser un foreach() au lieu d'un while() ? Si c'est un string tu peux utiliser un petit explode() au préalable pour séparer ce string en array, ce qui sera plus facile à analyser.
Comme ca, je penser qu'il y a un point où tu demandes si une URL précise se trouve dans $_POST['urls'] ? Une fois que c'est un array, facile, tu fais une vérification in_array().
Dis-moi si ça t'aide !
Ouais je comprends un peu mal comment ton script tourne, mais une chose de sûre : ta boucle est sensée se répéter tant que $test3 est un nombre. Il peut rester un nombre pendant longtemps !!! :-P
Si tu veux passer à travers les valeurs de ton $_POST['urls'] (j'assume que c'est un array ?) pourquoi ne pas utiliser un foreach() au lieu d'un while() ? Si c'est un string tu peux utiliser un petit explode() au préalable pour séparer ce string en array, ce qui sera plus facile à analyser.
Comme ca, je penser qu'il y a un point où tu demandes si une URL précise se trouve dans $_POST['urls'] ? Une fois que c'est un array, facile, tu fais une vérification in_array().
Dis-moi si ça t'aide !
KunGu
Messages postés
1169
Date d'inscription
vendredi 7 septembre 2007
Statut
Membre
Dernière intervention
17 mars 2013
224
2 juin 2011 à 16:47
2 juin 2011 à 16:47
Alors non, le $_POST['urls'] n'est pas un array, il contient les données qui viennent d'être écrites dans un formulaire juste avant.
Mon but est de récupérer des URLs qui seront écrites dans le formulaire (le problème est que l'organisation dans le formulaire sera "en bordel" c'est à dire qu'il peut y avoir du texte entre ... etc ..) et d'ensuite les envoyer une par une à une fonction (que j'ai simplifié par un simple echo)
Le problème est que je veux arrêter ma boucle de tourner une fois que stripos est arrivé au bout de son analyse (qu'il n'y a plus d'occurences), mais je ne sait pas comment !
Ton idée d'explode est bonne, sauf que je n'ai aucun délimiteur étant donné que je ne connais pas l'organisation dans URLbordel ... A moins que je puisse utiliser explode au lieu de stripos ?
Je ne sais pas :(
Mon but est de récupérer des URLs qui seront écrites dans le formulaire (le problème est que l'organisation dans le formulaire sera "en bordel" c'est à dire qu'il peut y avoir du texte entre ... etc ..) et d'ensuite les envoyer une par une à une fonction (que j'ai simplifié par un simple echo)
Le problème est que je veux arrêter ma boucle de tourner une fois que stripos est arrivé au bout de son analyse (qu'il n'y a plus d'occurences), mais je ne sait pas comment !
Ton idée d'explode est bonne, sauf que je n'ai aucun délimiteur étant donné que je ne connais pas l'organisation dans URLbordel ... A moins que je puisse utiliser explode au lieu de stripos ?
Je ne sais pas :(
coeus
Messages postés
3021
Date d'inscription
samedi 13 janvier 2007
Statut
Membre
Dernière intervention
19 juin 2013
119
2 juin 2011 à 18:11
2 juin 2011 à 18:11
A moins que je puisse utiliser explode au lieu de stripos ?
C'est ce que je préconise. Peut-être que des délimiteurs, tu peux en insérer artificiellement. Là c'est un peu dur de te conseiller vu que je n'ai pas le code qui "forge" ton $_POST[urls] (qui doit être assez compliqué anyway)... Mais peut-être que tu peux ajouter un "#####" ou quelque chose dans le genre, au moment de passer tes données de formulaire dans le POST ?
Si je comprends bien, tu considères qu'il y a une nouvelle entrée dans ton URLS à tous les 35 caractères ? Dans ce cas, pour te simplifier la vie, peut-être que tu pourrais faire un chunk_split() au préalable sur ton $_POST[urls] ? Après c'est facile de tout rassembler ça dans un array bien classé.
C'est ce que je préconise. Peut-être que des délimiteurs, tu peux en insérer artificiellement. Là c'est un peu dur de te conseiller vu que je n'ai pas le code qui "forge" ton $_POST[urls] (qui doit être assez compliqué anyway)... Mais peut-être que tu peux ajouter un "#####" ou quelque chose dans le genre, au moment de passer tes données de formulaire dans le POST ?
Si je comprends bien, tu considères qu'il y a une nouvelle entrée dans ton URLS à tous les 35 caractères ? Dans ce cas, pour te simplifier la vie, peut-être que tu pourrais faire un chunk_split() au préalable sur ton $_POST[urls] ? Après c'est facile de tout rassembler ça dans un array bien classé.
monkey_monk
Messages postés
641
Date d'inscription
mercredi 1 juillet 2009
Statut
Membre
Dernière intervention
10 août 2012
130
2 juin 2011 à 17:34
2 juin 2011 à 17:34
Bonjour,
as-tu chercher du cote de preg_split() ?
L'utilisation des regexp me semble etre indiquee dans ton cas et plus simple...
as-tu chercher du cote de preg_split() ?
L'utilisation des regexp me semble etre indiquee dans ton cas et plus simple...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
KunGu
Messages postés
1169
Date d'inscription
vendredi 7 septembre 2007
Statut
Membre
Dernière intervention
17 mars 2013
224
2 juin 2011 à 19:09
2 juin 2011 à 19:09
Ahh mais en fait tu n'a pas totalement saisi le sens du code, je t'explique.
J'ai une page toute simple, avec un textarea et un bouton valider où les utilisateurs pourront coller des URLs (de la forme https://www.google.fr/search?q=abc&gws_rd=ssl donc de 35 caractères). Seulement, ils pourront les coller n'importe comment (exemple : https://www.google.fr/search?q=abcbonjour&gws_rd=ssl les amishttps://www.google.fr/search?q=abcles&gws_rd=ssl amis bonjour).
Mon script va donc récupérer dans ce formulaire qui vient d'être posté ces URLs "en bordel" et va donc rechercher la position des occurrences "https://www.google.fr/webhp?gws_rd=ssl" pour ensuite copier l'URL entière c'est à dire avec "abc" (ex donc : https://www.google.fr/search?q=abc&gws_rd=ssl
Ma boucle sert donc à répéter la recherche dans tout le document à la recherche d'autres occurrences. Seulement, je veux qu'elle s'arrête une fois qu'il n'y a plus d'occurrences disponibles dans la variable (ce que j'avais fait au début avec is_integer mais qui ne fonctionne pas)
Ce qu'il me faudrait savoir en fait, c'est ce que renvoie la fonction stripos une fois que la recherche est finie pour arreter ma boucle ...
Si je comprends bien, tu considères qu'il y a une nouvelle entrée dans ton URLS à tous les 35 caractères ? Dans ce cas, pour te simplifier la vie, peut-être que tu pourrais faire un chunk_split() au préalable sur ton $_POST[urls] ? Après c'est facile de tout rassembler ça dans un array bien classé.
Non non ! C'est que je sais que l'URL que je veux trouver fait 35 caractères, donc dès qu'il m'a trouvé une position d'occurrence, je copie à partir de cette position les 35 caractères suivants dans une variable (ce qui est UNE url), puis je continue ma recherche avec un l'offset de la position + 35 caractères.
Désolé si je te fais un peu t'embrouiller par ce code ^^
Et merci de m'aider c'est sympa :D
J'ai une page toute simple, avec un textarea et un bouton valider où les utilisateurs pourront coller des URLs (de la forme https://www.google.fr/search?q=abc&gws_rd=ssl donc de 35 caractères). Seulement, ils pourront les coller n'importe comment (exemple : https://www.google.fr/search?q=abcbonjour&gws_rd=ssl les amishttps://www.google.fr/search?q=abcles&gws_rd=ssl amis bonjour).
Mon script va donc récupérer dans ce formulaire qui vient d'être posté ces URLs "en bordel" et va donc rechercher la position des occurrences "https://www.google.fr/webhp?gws_rd=ssl" pour ensuite copier l'URL entière c'est à dire avec "abc" (ex donc : https://www.google.fr/search?q=abc&gws_rd=ssl
Ma boucle sert donc à répéter la recherche dans tout le document à la recherche d'autres occurrences. Seulement, je veux qu'elle s'arrête une fois qu'il n'y a plus d'occurrences disponibles dans la variable (ce que j'avais fait au début avec is_integer mais qui ne fonctionne pas)
Ce qu'il me faudrait savoir en fait, c'est ce que renvoie la fonction stripos une fois que la recherche est finie pour arreter ma boucle ...
Si je comprends bien, tu considères qu'il y a une nouvelle entrée dans ton URLS à tous les 35 caractères ? Dans ce cas, pour te simplifier la vie, peut-être que tu pourrais faire un chunk_split() au préalable sur ton $_POST[urls] ? Après c'est facile de tout rassembler ça dans un array bien classé.
Non non ! C'est que je sais que l'URL que je veux trouver fait 35 caractères, donc dès qu'il m'a trouvé une position d'occurrence, je copie à partir de cette position les 35 caractères suivants dans une variable (ce qui est UNE url), puis je continue ma recherche avec un l'offset de la position + 35 caractères.
Désolé si je te fais un peu t'embrouiller par ce code ^^
Et merci de m'aider c'est sympa :D
coeus
Messages postés
3021
Date d'inscription
samedi 13 janvier 2007
Statut
Membre
Dernière intervention
19 juin 2013
119
2 juin 2011 à 20:37
2 juin 2011 à 20:37
Ah d'accord je comprends un peu mieux.
Dans ce cas, la solution la plus facile d'après moi, ce serait une expression régulière.
Utilise la fonction preg_match pour comparer ton string avec la formule suivante :
Note, je n'ai pas testé cette expression, il y aura probablement des détails à régler... Tu peux t'aider de cette référence pour mieux comprendre. En gros, ce que j'essaie de faire, c'est trouver un string dans ton POST[urls] qui :
- commence par l'adresse de google (de là le "^" en début de chaîne) ; et
- est suivi d'un ou plusieurs caractères (d'où le ".+") mais seulement si ces caractères sont suivis par le string "http" OU par le string "###" (que tu peux rajouter artificiellement pour dénoter la fin du POST[urls], parce que sinon, la dernière adresse de la liste ne paraîtra pas ;
- je fais la recherche dans tout le string (avec le "e" en fin de chaîne)
Si tu utilises bien le preg_match, tu devrais te retrouver avec un array contenant toutes les instances où l'expression a été reconnue dans ton POST[urls]... Après, ce sera plus facile à traiter.
Pour plus de sûreté, tu peux donner un autre/d'autres délimiteur(s) que seulement "http" ; tu peux mettre "http:\/\/www.google.fr\/" ou n'importe quoi d'autre qui risque de marquer le début d'une nouvelle URL. Fais seulement attention à bien escaper tes caractères spéciaux.
Voilà, c'est un peu le bordel, je sais, les expressions régulières sont difficiles à expliquer, il va falloir que tu l'expérimentes, si tu n'es pas déjà habitué(e). N'hésite pas s'il y a un détail que tu ne comprends pas, ou poste-moi les résultats des expressions que tu testes et qui ne fonctionnent pas, je pourrai t'aider à trouver ce qui manque...
En espérant que ça t'aide...
Dans ce cas, la solution la plus facile d'après moi, ce serait une expression régulière.
Utilise la fonction preg_match pour comparer ton string avec la formule suivante :
'/^(http:\/\/www.google.fr\/search?q=)(.+(?=http|###))/e'
Note, je n'ai pas testé cette expression, il y aura probablement des détails à régler... Tu peux t'aider de cette référence pour mieux comprendre. En gros, ce que j'essaie de faire, c'est trouver un string dans ton POST[urls] qui :
- commence par l'adresse de google (de là le "^" en début de chaîne) ; et
- est suivi d'un ou plusieurs caractères (d'où le ".+") mais seulement si ces caractères sont suivis par le string "http" OU par le string "###" (que tu peux rajouter artificiellement pour dénoter la fin du POST[urls], parce que sinon, la dernière adresse de la liste ne paraîtra pas ;
- je fais la recherche dans tout le string (avec le "e" en fin de chaîne)
Si tu utilises bien le preg_match, tu devrais te retrouver avec un array contenant toutes les instances où l'expression a été reconnue dans ton POST[urls]... Après, ce sera plus facile à traiter.
Pour plus de sûreté, tu peux donner un autre/d'autres délimiteur(s) que seulement "http" ; tu peux mettre "http:\/\/www.google.fr\/" ou n'importe quoi d'autre qui risque de marquer le début d'une nouvelle URL. Fais seulement attention à bien escaper tes caractères spéciaux.
Voilà, c'est un peu le bordel, je sais, les expressions régulières sont difficiles à expliquer, il va falloir que tu l'expérimentes, si tu n'es pas déjà habitué(e). N'hésite pas s'il y a un détail que tu ne comprends pas, ou poste-moi les résultats des expressions que tu testes et qui ne fonctionnent pas, je pourrai t'aider à trouver ce qui manque...
En espérant que ça t'aide...
KunGu
Messages postés
1169
Date d'inscription
vendredi 7 septembre 2007
Statut
Membre
Dernière intervention
17 mars 2013
224
5 juin 2011 à 01:02
5 juin 2011 à 01:02
Bon !
j'ai fini par utiliser une expression réguière, qui a trèèss bien marché, j'ai simplement utilisé "http:\/\/www.google.fr\/search\?q=..." comme expression régulière.
J'ai par contre utilisé preg_match_all comme fonction pour pouvoir faire ma recherche sur toute la variable jusqu'à la fin, qui m'a rentré tout ca dans un tableau a 2 dimensions, que j'ai réussi à faire traiter correctement.
Tout marche, merci encore !
j'ai fini par utiliser une expression réguière, qui a trèèss bien marché, j'ai simplement utilisé "http:\/\/www.google.fr\/search\?q=..." comme expression régulière.
J'ai par contre utilisé preg_match_all comme fonction pour pouvoir faire ma recherche sur toute la variable jusqu'à la fin, qui m'a rentré tout ca dans un tableau a 2 dimensions, que j'ai réussi à faire traiter correctement.
Tout marche, merci encore !