À noter que j'ai proposé une solution plus compréhensible et la plus simple qui soit ...
Peut-être pas la plus simple, il faut déjà une bonne expérience pour y penser. Mais didactique c'est certain.
Pour faire plus simple (sans utiliser wordwrap) on pourrait faire ceci
$tab = array();
while($string != '')
{
$tab[] = substr($string,0,4);
$string = substr($string,4);
}
$result = implode(' ',$tab);
L'avantage de cette solution (bien moins performante qu'une expression régulière ou qu'un wordwrap) est qu'elle est très facilement portable en utf-8 pour toute chaine de caractères y compris des caractères accentués :
$tab = array();
while($string != '')
{
$tab[] = mb_substr($string,0,4,'utf-8');
$string = mb_substr($string,4,mb_strlen($string,'utf-8'),'utf-8');
}
$result = implode(' ',$tab);
... mais il y a encore plus simple :
$long = mb_strlen($string,'utf-8');
$tab = array();
for($i=0; $i < $long ; $i += 4)
{
$tab[] = mb_substr($string,$i,4,'utf-8');
}
$result = implode(' ',$tab);
A noter que pour faire toujours plus court on pourrait utiliser les fonctions des tableaux
$result = implode(' ',str_split($string, 4));
mais c'est sans intérêt réel par rapport à un wordwrap puisque str_split n'est pas non plus compatible utf-8;
C'est vrai que j'oublie souvent wordwrap car non compatible utf-8 mais il est vrai que dans le cas particulier de ce sujet puisqu'il ne s'agit que de chiffres, c'est encore le plus simple.