[php] trouver le ième caractère ds un string

Résolu
28_seb Messages postés 88 Statut Membre -  
 Vidda -
Bonjour,

Ma question est surement bête, mais je crois qu'il existe un fonction en php, qui permet de trouver la position du ième caractère dans une chainne.
Par ex: $st = "elle va l'école, et après, elle dort"
J'essaye de récupérer la position du deuxième ','. donc ici la position 25

Meci bcp.
Configuration: Windows 2000
Firefox 2.0.0.4

7 réponses

  1. kij_82 Messages postés 4102 Date d'inscription   Statut Contributeur Dernière intervention   857
     
    Je n'ai pas trouvé de fonction qui le face déjà, donc j'en ai fait une vite fait, mais je n'ai pas débuggué donc à toi de corriger si bug :)

    function searchPos ( $source, $occurence, $number ){
    	
    	$found 	= FALSE;
    	$curs 	= 0;
    	
    	do{
    		
    		// --- try to retrieve index of char to found : (FALSE if not found)
    		$currentPos = strpos($source,$occurence);
    		
    		// --- test return value && current counter
    		if ( $currentPos != FALSE ){
    			// --- Increase counter
    			$curs++;
    			// --- Test if current counter equals to number of the occurent to retrieve
    			if ( $curs == $number )
    				$found = TRUE;
    		}
    		
    	}while ( $found != FALSE && $currentPos != FALSE );
    	// --- Loop on source string to retrieve the occurence
    	
    	// --- Test if occurence had been found and return position if OK
    	if ( $found == TRUE )
    		return $currentPos;
    	else
    		// --- Return default not found value '-1'
    		return -1;
    	
    }
    


    Le but comme tu l'as demandé est de trouvé l'index dans une chaine de caractère d'un Nieme occurence. Si rien n'est trouvé, la fonction retourne -1.

    3
  2. naruto-94 Messages postés 904 Statut Membre 188
     
    salut ,
    Tu l'as fait si vite que tu as mis les commentaires et les variables en anglais :P .
    1
    1. kij_82 Messages postés 4102 Date d'inscription   Statut Contributeur Dernière intervention   857
       
      Je vois pas le rapport entre la rapidité et le fait que ce soit en anglais. Tu saura que la langue commune est l'anglais ;) donc il est préférable de faire en anglais.
      -1
  3. snoo
     
    function pos_car($chaine,$caractere,$num_occurence){
        $pos = -1; 
        for ($i=1;$i<=$num_occurrence;$i++){ 
            $pos = strpos($chaine, $caractere, $pos+1); 
        } 
    return $pos;
    }
    1
    1. Vidda
       
      moi j'utilise strrpos()
      0
  4. 28_seb Messages postés 88 Statut Membre 11
     
    Merci beaucoup, je ne suis plus bloqué
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. bowbow13
     
    compliqué j aurais eu tendance a faire un split suivi d un length
    0
    1. Xil Messages postés 351 Statut Membre 257
       
      Fonction explode() pour PHP :)
      0
  7. Musix
     
    Le sujet est vieux mais bon... je vais quand même apporter ma graine :

    Ton problème est assez mal formulé... tu veux la position correspondant à un caractère donné, ou tu veux le caractère correspondant à une position ?

    Selon le cas, sers toi des fonctions suivantes :
    strpos()
    substr()

    Je te laisse aller regarder le manuel PHP (qui n'a pas été écrit pour rien)
    0
    1. kij_82 Messages postés 4102 Date d'inscription   Statut Contributeur Dernière intervention   857
       
      Ni l'un ni l'autre.
      Il voulait connaitre la position de la nième occurrence dans une chaine de caractère.

      Par contre je suis étonne que personne n'ai posté : "mais c'est du grand n'importe quoi ton code !!"

      Effectivement je suis effaré de voir que j'ai pu poster un code aussi mauvais et qui ne fonctionne de toute manière pas.
      Voilà la mise à jour qui fonctionne :
      
      function searchPos ( $source, $occurence, $number ){
      	
      	$found 	= FALSE;
      	$curs 	= 0;
      	$tmpSource = $source;
      	$finalPosition = 0;
      	
      	do{
      		
      		// --- try to retrieve index of char to found : (FALSE if not found)
      		$currentPos = strpos($tmpSource,$occurence);
      		
      		// --- test return value && current counter
      		if ( $currentPos !== FALSE ){
      			// --- Increase counter
      			$curs++;
      			// --- Increase position counter
      			$finalPosition += $currentPos;
      			
      			// --- Test if current counter equals to number of the occurent to retrieve
      			if ( $curs == $number )
      				$found = TRUE;
      			else {
      				$tmpSource = substr($tmpSource,$currentPos+sizeof($occurence));
      			}
      			
      		}
      		
      	}while ( $found == FALSE && $currentPos !== FALSE );
      	// --- Loop on source string to retrieve the occurence
      	
      	// --- Test if occurence had been found and return position if OK
      	if ( $found == TRUE )
      		return $finalPosition;
      	else
      		// --- Return default not found value '-1'
      		return -1;
      	
      }
      



      Sinon, pour l'utilisation de 'split' et 'length', ça simplifie pas forcément car tu dois prendre en compte les cas où ta chaine de caractère commence par l'occurrence recherchée. Ta formule de calcul de la lenght est donc légèrement plus complexe que l'on peut le penser au premier abord.
      -1
  8. Nihil
     
    Sinon il y a ça:
    function strNpos($str, $needle, $n,$offset=0){
    	$findOccur = 0;
    	$lastPos = $offset;
    	while(($lastPos = strpos($str,$needle,$lastPos))!==false && $findOccur!=$n-1){		
    		$findOccur++;
    		$lastPos+=strlen($needle);
    	}
    	return $lastPos;
    }


    J'espère ne pas avoir fais d'erreur...
    0