Rajouter un espace entre chaque lettre d'un string

VaN
Mammouth du PHP | 1107 Messages

24 janv. 2007, 20:57

Bonsoir,

je cherche à savoir comment "espacer" un mot, c'est dire mettre 1 (ou plusieurs) espaces entre chaque caractères d'un string. Il y'a t'il une fonction qui ferait ça ?

Si non, de quelles fonctions vais-je devoir me servir pour la créer ?

ViPHP
AB
ViPHP | 5818 Messages

24 janv. 2007, 21:14

Bonjour,

Si c'est pour l'affichage, tu pourrais peut-être faire ça en css avec letter-spacing

VaN
Mammouth du PHP | 1107 Messages

24 janv. 2007, 21:45

c'est un texte aleatoire que j'affiche sur une image à l'aide de la library GD, donc non, je ne peux pas jouer sur l'affichage, il faut que ça soit du brut.

ViPHP
ViPHP | 3607 Messages

24 janv. 2007, 21:48

alors fais-le avec un
implode(' ', str_split($tontexte, 1));

VaN
Mammouth du PHP | 1107 Messages

25 janv. 2007, 02:31

en essayant d'utiliser ça, j'ai reçu un
Call to undefined function: str_split()
. J'ai cherché, et appris que str_split est propre au PHP5. La version locale de mon PHP 4.3.10, et je ne suis pas sûr non plus que PHP 5 sera installé sur le serveur ou je souhaite faire tourner ce script. Existe t'il un moyen de faire la même chose en PHP 4 ?

ViPHP
ViPHP | 1961 Messages

25 janv. 2007, 03:14

Bonsoir,

Si la roue n'existe pas, il faut l'inventer.

Je vais te proposer une méthode, parmi tant d'autres, mais elle me semble simple.

On va traiter nôtre chaine de caractères comme un tableau et considérer que chaque caractère est le contenu d'un poste de ce tableau.

Regarde les commentaires et essaie de comprendre ce qui se passe, si tu as des questions, n'hésite pas à les poser.

Ne te contente pas d'un copier/coller, ça ne te servirait à rien.
<?php
	$myIntialString = 'abcde';
	// Initialisation de la chaine finale
	$myFinalString = '';
	// Le caractère que l'on veut insérer
	$charSeparator = ' ';
	// Calcul de la longueur de la chaine
	$stringLength = strlen($myIntialString);
	// On récupère le premier caractère
	$myFinalString .= $myIntialString[0];
	// On parcour la chaine initiale en commençant au second caractère
	for($i = 1; $i < $stringLength; $i++) {
		// On concatène à la chaine déjà construite le séparateur et le nouveau caractère
		$myFinalString .= $charSeparator . $myIntialString[$i];
	}
	// On affiche le résultat
	echo $myFinalString;
?>
Ce code fait ce qu'on souhaite, il ajoute un espace entre chaque caractère.
Mais il a plusieurs inconvénients.
- On ne peut l'utiliser qu'une fois.
- seul l'espace peut être utilisé comme séparateur de caractères.
On va donc faire en sorte que nôtre travail soit réutilisable et plus souple (que je puisse utiliser un autre séparateur)

Pour ce là on va transformer ce code en fonction avec comme séparateur par défaut l'espace.
<?php
	function separe_caracteres($intialString, $charSeparator = ' ') {
		// Initialisation de la chaine finale
		$finalString = '';
		// Calcul de la longueur de la chaine
		$stringLength = strlen($intialString);
		// On récupère le premier caractère
		$finalString .= $intialString[0];
		// On parcour la chaine initiale en commençant au second caractère
		for($i = 1; $i < $stringLength; $i++) {
		// On concatène à la chaine déjà construite le séparateur et le nouveau caractère
			$finalString .= $charSeparator . $intialString[$i];
		}
		// On retourne le résultat
		return ($finalString);
	}
	/*
	* Tests de la fonction
	*/
	// Appel de la fonction sans le second paramètre
	$myFinalString = separe_caracteres('abcde');
	echo $myFinalString . '<br />';
	// Appel de la fonction avec le second paramètre qui n'est pas forcément un seul caractère
	$myFinalString = separe_caracteres('abcde', '#-#');
	echo $myFinalString . '<br />';
?>
L'exécution me donnera

Code : Tout sélectionner

a b c d e a#-#b#-#c#-#d#-#e
D'autres améliorations peuvent être apportées, comme séparer tous les X caractères.
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

25 janv. 2007, 03:58

J'ai cherché,
...dans le manuel ? il y a dix versions différentes de str_split() en PHP 4 dans les commentaires.

Sinon, le mieux est de télécharger PHP_Compat, qui propose des remplacement pour pratiquement toutes les fonctions de PHP 5.

PS: désoler d'obsoléter le long post d'Ajoloca :o