Vous pouvez utiliser une combinaison de explode
, array_chunk
, array_map
et implode
:
$words = explode(' ', $string);
$chunks = array_chunk($words, 2);
$chunks = array_map(function($arr) { return implode(' ', $arr); }, $chunks);
$str = implode(',', $chunks);
Mais il suppose que chaque mot est séparé par un seul espace.
Une autre solution probablement plus facile est d'utiliser preg_replace
comme ceci:
preg_replace('/(\S+\s+\S+)\s/', '$1,', $string)
Le motif (\S+\s+\S+)\s
correspond à toute séquence d'un ou plusieurs caractères non-blancs (\S+
), suivi par un ou plusieurs caractères d'espacement (\s+
) , suivi d'un ou de plusieurs caractères non blancs, suivi d'un caractère d'espace et remplace le dernier espace par une virgule. Les espaces blancs en tête seront ignorés.
Ainsi, les matches seront dans ce cas:
a b c d e f g h i
\__/\__/\__/\__/
Ceux-ci sont alors remplacés comme suit:
a b,c d,e f,g h,i
merci, et comment sur le groupe de 3 ou 5 ou ... – kelester
@kelester: J'ai mis à jour mon post. – codaddict
Cela échoue lorsque 'fun' est appelé pour une chaîne différente si l'appel précédent est renvoyé avec un nombre de compteur impair. Appelez juste 'preg_replace_callback ('/() /', 'fun', $ string)' deux fois de suite sur la chaîne mentionnée et vous obtenez des résultats différents. – Gumbo