[PHP] Retourner ttes les positions d'une occurence?

Retourner ttes les positions d'une occurence? [PHP] - Programmation

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
Reply

Marsh Posté le 24-07-2002 à 11:41:43   

Reply

Marsh Posté le 24-07-2002 à 12:26:35    

j'ai essayé ça:

Code :
  1. $chaine = "test blablablatest blablabla test blablabla";
  2. $i = 0;
  3. $start = 0;
  4. $long_max = strlen($chaine);
  5. do
  6. {
  7. $positions[$i] = strpos($chaine, "test", $start);
  8. $start = $positions[$i]+1;
  9. $i++;
  10. }
  11. while($start<$long_max);


euh... ça à l'air de me faire une boucle infinie... où est mon erreur?  :??:

Reply

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;


Message édité par ethernal le 24-07-2002 à 12:42:53

---------------
...oups kernel error...
Reply

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 :
  1. $mot = "test";
  2. $long = strlen($mot);
  3. $chaine = " test blablablatest blablabla test blablabla";
  4. $i = 0;
  5. $start = 0;
  6. $long_max = strrpos($chaine, $mot)-$long+2;
  7. echo $long_max;
  8. do
  9. {
  10. $positions[$i] = strpos($chaine, $mot, $start);
  11. $start = $positions[$i]+1;
  12. $i++;
  13. }
  14. while($start<$long_max);

Reply

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.


---------------
...oups kernel error...
Reply

Marsh Posté le 24-07-2002 à 13:53:52    

Très bien mais...
ton code ne samble pas fonctionner!
En sortie, j'ai

Code :
  1. Array ( [0] => 0 [1] => 14 )

...
il manque donc la dernière occurence


Message édité par Toto21 le 24-07-2002 à 13:57:12
Reply

Marsh Posté le 24-07-2002 à 13:56:41    

ouais le script semble s'interrompre au bout de 2 occurences trouvées.
 :??:


Message édité par Toto21 le 24-07-2002 à 13:56:56
Reply

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...


---------------
...oups kernel error...
Reply

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!?

Reply

Marsh Posté le 24-07-2002 à 18:23:23    

:sweat:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed