Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1465 connectés 

 


Dernière réponse
Sujet : [PHP] Retourner ttes les positions d'une occurence?
Toto21 :sweat:

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
Toto21 :sweat:
Toto21 ouep........
Mais y aurait pas un autre moyen? Parce que ça me parrait bien compliqué tout ça!?
ethernal 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...
Toto21 ouais le script semble s'interrompre au bout de 2 occurences trouvées.
 :??:
Toto21 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

ethernal ç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.
Toto21 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);

ethernal $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;
Toto21 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?  :??:

Toto21 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...  :??:

Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR