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 :cry:

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 :lol:

je commence tout juste les expression reguliere en cours, c'est un peu trop dur pour ma ptite tete :?