preg_split avec <\s+> ou explode avec " "

Eléphanteau du PHP | 27 Messages

22 mai 2012, 14:44

Bonjour,
je reprends un projet, et j'ai un doute sur un élément.
Effectivement je retrouve la ligne suivante :
$infos = preg_split("<\s+>", trim($line));
Après un var_dump de $infos et de $line,
j'ai l'impression qu'il s'agit d'un explode :
$infos = explode(" ", trim($line));
Pourriez-vous me confirmer que ces deux lignes ont le même fonctionnement ou m'expliquer la nuance s'il vous plaît ?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

22 mai 2012, 19:00

La nuance est sur les caractères et le nombre d'espaces consécutifs que va traiter la fonction, et donc le nombre de cellule dans le tableau final.

Le "\s" de l'expression régulière inclus les espaces, les tabulations ainsi que les retours à la ligne. Le "+" permet de spécifier que s'il y a un ou plus de ces éléments contigus, ils sont traités comme s'il n'y en avait qu'un seul.
Par exemple, avec la chaine suivante (contenant 3 espaces consécutifs et un retour à la ligne) :
$line = "ma   chaine
est belle";
Ta fonction retournera le tableau

Code : Tout sélectionner

Array ( [0] => "ma" [1] => "chaine" [2] => "est" [3] => "belle" )
Alors qu'un implode sur le caractère espace retournera

Code : Tout sélectionner

Array ( [0] => "ma" [1] => "" [2] => "" [3] => "chaine\nest" [4] => "belle" )
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 27 Messages

23 mai 2012, 09:57

Merci beaucoup pour cette réponse complète, j'avais du mal à m'y retrouver...
Bonne journée !
Julie