Retourner ttes les positions d'une occurence? [PHP] - Programmation
Marsh Posté le 24-07-2002 à 12:26:35
j'ai essayé ça:
Code :
|
euh... ça à l'air de me faire une boucle infinie... où est mon erreur?
Marsh Posté le 24-07-2002 à 12:37:23
$chaine = "test blablablatest blablabla test blablabla";
$seek= "test";
$i = 0;
$start = 0;
$long_max = strlen($chaine);
$lg_seek= strlen($seek);
do
{
$positions[$i] = strpos($chaine, $seek, $start);
$start = $positions[$i]+1;
}
while($position[$i++]==false);
la boucle ne doit s'arrêter que s'il ne trouve plus d'occurence : strpos retourne false.
ici ça va te trouver l'occurence 2x si tu as comme chaine "testest".
si tu ne veux le trouver qu'une fois, mets
$start = $positions[$i]+$lg_seek+1;
Marsh Posté le 24-07-2002 à 12:41:50
ouais c'est bon merci!!
Mais je venais de trouver une autre solution, en cherchant la DERNIERE occurence avec strrpos et en faisant la boucle à partir de ça:
Code :
|
Marsh Posté le 24-07-2002 à 12:49:10
ça pourrait poser problème si il n'y a pas d'occurence dans la chaine non ?
$long_max = FALSE -[longueur_chaine]+2;
que vaut $long_max pour ta condition d'arrêt ??
délicat tout ça... et pas très catholique.
même si je suis presque sûr que cela ne devrais pas poser de problèmes à l'exécution.
Marsh Posté le 24-07-2002 à 13:53:52
Très bien mais...
ton code ne samble pas fonctionner!
En sortie, j'ai
Code :
|
...
il manque donc la dernière occurence
Marsh Posté le 24-07-2002 à 13:56:41
ouais le script semble s'interrompre au bout de 2 occurences trouvées.
Marsh Posté le 24-07-2002 à 15:06:38
je capte pas du tout là
surtout que si après la boucle je met un test qui regarde si postions[$i]==false, il me dit que non...
Marsh Posté le 24-07-2002 à 15:36:08
ouep........
Mais y aurait pas un autre moyen? Parce que ça me parrait bien compliqué tout ça!?
Marsh Posté le 24-07-2002 à 11:41:43
Comment est-ce que je peux faire pour retourner toutes les positions numériques de l'occurence "xxx" d'une variable?
J'ai trouvé strpos mais ça ne me renvoie que la position de la première...
Message édité par Toto21 le 24-07-2002 à 11:42:02