Bonjour
pour m'entraîner j'essaye de faire une fonction PHP qui lit une phrase prise en paramètre
et qui va remplacer chaque mot par son numéro d'emplacement dans la chaîne de caractère genre si j'veux retirer les R :
"Bonjour Monsieur comment vous allez ?"
sera remplacé par :
"6 15 comment vous allez ?" (6 parce que le 'r' de "Bonjour" était le 6ème caractère etc)
c'est un entraînement pour un exam en php
<?php
function caractere ($mot){
$i = 0;
$j = 0;
$length = strlen($mot);
$debutmot = $i;
while($i < $length){
if ($mot[$i] == ' ')
$debutmot = $i+1;
while ($mot[$i] =! ' '){ // RAJOUTER ICI LA BOUCLE POUR VERIFIER SI ON PASSE UN MOT ETC
if ($mot[$i] == 'r'){
$j = $debutmot+1;
$mot[$j] = 'T'; // on remplace la 1ère lettre du mot par la longueur
while ($j < $length-1){ // avant de remplacer par le reste
$mot[$j] = $mot[$j+1];
$j++;
}
$mot[$length-1] = '';
}
$i++;
}
if ($mot[$i] == ' ')
$i++;
}
return $mot;
}
$word2 = "bonjour";
echo caractere("Bonjoure");
?>
le problème c'est qu'elle reste bloquée dans une boucle on dirait mais laquelle ??
utilise des for, ça évite ce genre de truc et c'est plus simple à débug je trouve
d'acc' j'vais essayer
Si tu as 2 "r" dans un mot, ça doit réagir comment ?
ah bah pareil c'est dèsq ue ya un 'r' dans le mot quoi
Ton paramètre doit être un tableau?
<?php
function caractere ($mot){
$i=0; //compteur de while
$newTab = []; //tableau qui va nous servir
$motTab = explode(" ", $mot); // on explose la chaine par les espace et sa met dans un tableau
$key = count($motTab);//on compte le nombre d'entée
while ($i < $key) { //tant que $i n'est pas au nombre d'entrée
$result = strpos($motTab[$i], "r"); // on cherche la position d'un r dans la valeur
if($result > 0) { // si $result est supèrieur à 0 c'est quil ya un r
array_push($newTab, $result); // alors on push sa position dans un nouveau tableau
$i++; //et on incrémente
} else { // sinon c'est qu'il n'ya pas de r dans le mot
array_push($newTab, $motTab[$i]); //on push donc le mot
$i++; // on oubli pas d'incrémenter bien sur
}
}
$nouvelleChaine = implode(" ", $newTab); // on "implose" notre nouveau tableau pour en refaire une chaine
echo $nouvelleChaine; // et la j'affiche le resultat
}
caractere("Bonjoure je suis");
?>
voila, je te laisse analyser le code.
alors euh j'ai analysé mais mec j'sais pas si t'as essayé mais il supprime que le 'r' du 1er mot
genre un truc style :
"Bonjour je ne trouve plus mon rateau" il marche pas
en fait quand le 'r' est au début il compte pas on dirait
oui dsl je viens de reteste et ce n'est pas if($result>0), mais if($result !== false).
Apres tu as besoin qu'il te retourne la position et le dernier te retourne la position 0 car les position commence par zero, donc si j'ai bien compris c'est ce que tu recherche?
tu peux le faire en 6 lignes avec preg_match_all($pattern, $subject, $matches, PREG_OFFSET_CAPTURE)
http://php.net/manual/en/function.preg-match.php
le regex : '/\w*[' . $char . ']\w*/i'
ça te renvoie un tableau ($matches) avec tous les mots contenant ton caractère et leur position dans le texte, il ne reste plus qu'a les remplacer par les position fournies