Page 1 sur 1

Rajouter un espace entre chaque lettre d'un string

Posté : 24 janv. 2007, 20:57
par VaN
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 ?

Posté : 24 janv. 2007, 21:14
par AB
Bonjour,

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

Posté : 24 janv. 2007, 21:45
par VaN
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.

Posté : 24 janv. 2007, 21:48
par jojolapine
alors fais-le avec un
implode(' ', str_split($tontexte, 1));

Posté : 25 janv. 2007, 02:31
par VaN
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 ?

Posté : 25 janv. 2007, 03:14
par Ajoloca
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.

Posté : 25 janv. 2007, 03:58
par Hubert Roksor
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