lire un mot lettre par lettre

Eléphant du PHP | 74 Messages

27 févr. 2005, 00:03

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

Invité
Invité n'ayant pas de compte PHPfrance

27 févr. 2005, 00:18

en c tu as le fonction strlen, je crois qu'elle est presente en php aussi

donc while($i < strlen($hello) )

Eléphant du PHP | 74 Messages

27 févr. 2005, 00:30

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:

Eléphant du PHP | 67 Messages

27 févr. 2005, 00:38

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+

Eléphant du PHP | 74 Messages

27 févr. 2005, 01:23

oui, en effet
ça permet de remplacer seulement un caractere!
je lirai la doc sur les strings demain :)

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

27 févr. 2005, 01:41

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;
	}
}

Mammouth du PHP | 1885 Messages

27 févr. 2005, 02:03

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;
}
?>
;)
La programmation est l'expression de la poésie d'un programmeur
Génération PHP

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

27 févr. 2005, 02:31

ok ok... ;)

c'est surtout l'utilisation du modulo que je trouve mieux, je n'y avait pas pensé :)

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

27 févr. 2005, 05:16

En fait on pourrait même le faire en une ligne avec une expression régulière ;)
preg_replace('/(.)(.?)/', '<b>$1</b>$2', $mot);

Mammouth du PHP | 1885 Messages

27 févr. 2005, 05:23

Intéressant, j'avais pensé utiliser les regexp mais n'avait aucune idée de la manière de faire.

Bravo!
La programmation est l'expression de la poésie d'un programmeur
Génération PHP

Eléphant du PHP | 74 Messages

27 févr. 2005, 19:45

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