Page 1 sur 1
lire un mot lettre par lettre
Posté : 27 févr. 2005, 00:03
par datesta
salut tout le monde
je voudrais lire un mot et pis mettre un caractere sur deux du mot en gras!
avant :
$mot = "helllo"
apres :
$mot ="<b>
h</b>e<b>
l</b>l<b>
l</b>o"
en c++ je sais qu'on peut lire une chaine lettre par lettre avec un while mais est-ce que c'est valable en php ??
pouvez vous m'aidez pour ce while ? :
$gras=1;
$i=0;
while(end of $mot) //
Comment faire ???
{
if(gras==1)
{
$mot[$i]="<b>".$mot[$i]."</b>" //
en c++ c'est comme ça qu'on fait mais en php ??
$gras=0;
}else{
$mot[$i]="<i>".$mot[$i]."</i>"
$gras=1;
}
$i++;
}
merci d'avance à celui qui pourra m'aider

Posté : 27 févr. 2005, 00:18
par Invité
en c tu as le fonction strlen, je crois qu'elle est presente en php aussi
donc while($i < strlen($hello) )
Posté : 27 févr. 2005, 00:30
par datesta
en effet j'avais pas pensé à cette solution!
merci
mais maintenant c'est le $mot[$i] qui est pas bon !
ça ne permet pas de remplacer caractere par caractere

Posté : 27 févr. 2005, 00:38
par crab
Hello,
Pour l'accès aux caractère d'une chaine de caractère, en PHP tu peux utiliser les accolades ({}) ==> voir doc :
http://ch2.php.net/types.string
Exemple
<?php
$chaine = "Hello";
$premier_car = $chaine{0};
?>
Mais d'après la doc cette notation est obsolète.
Ceci dit, je ne suis pas sur que ton code va jouer car tu remplaces un caractère par une chaîne de caractère ($mot[$i]="<b>".$mot[$i]."</b>").
Enfin test, tu verras bien...
A+
Posté : 27 févr. 2005, 01:23
par datesta
oui, en effet
ça permet de remplacer seulement un caractere!
je lirai la doc sur les strings demain

Posté : 27 févr. 2005, 01:41
par ouckileou
tu peux aussi utiliser une seconde variable :
$mot = "hello";
$gras = false;
$motBis = "";
for ($i=0;$i<strlen($mot);$i++) {
if ($gras == true) {
$motBis .= "<b>".$mot{$i}."</b>";
$gras = false;
} else {
$motBis .= $mot{$i};
$gras = true;
}
}
Posté : 27 févr. 2005, 02:03
par Xenon_54
Je crois que la seconde variable est inutile. (à mon humble avis)
<?php
function gras12($string) {
$return = '';
for ($i=0; $i<strlen($string); $i++) {
if ($i%2) {
$return .= '<b>'.$string{$i}.'</b>';
} else {
$return .= $string{$i};
}
}
return $return;
}
?>

Posté : 27 févr. 2005, 02:31
par ouckileou
ok ok...
c'est surtout l'utilisation du modulo que je trouve mieux, je n'y avait pas pensé

Posté : 27 févr. 2005, 05:16
par Hubert Roksor
En fait on pourrait même le faire en une ligne avec une expression régulière
preg_replace('/(.)(.?)/', '<b>$1</b>$2', $mot);
Posté : 27 févr. 2005, 05:23
par Xenon_54
Intéressant, j'avais pensé utiliser les regexp mais n'avait aucune idée de la manière de faire.
Bravo!
Posté : 27 févr. 2005, 19:45
par datesta
merci a vous tous pour votre aide

je prefere la fonction de Xenon_54, car elle est plus facilement modifiable pour moi
je commence tout juste les expression reguliere en cours, c'est un peu trop dur pour ma ptite tete
