Parser une chaîne de caractère

Si vous êtes comme moi un habitué de kata, il est souvent demandé de parser des chaînes de caractères.

Par exemple, dans l'advent of code 2021, un exercice demandait de parser un ensemble d'instructions de type :

forward 5
down 5
up 3

Voici donc quelques manières de parser ces instructions.

La plus commune

La manière qui m'est venue le plus rapidement à l'esprit est d'utiliser la méthode explode :

$var = 'forward 5';
$instructions = explode(' ', $var);
/*
array (
  0 => 'forward',
  1 => '5',
)
*/

$direction = $instructions[0];
$distance = $instructions[1];

On peut simplifier en utilisant list.

$var = 'forward 5';
list($direction, $distance) = explode(' ', $var);

/*
$direction => string(7) "forward"
$distance => string(1) "5"
*/

C'est plutôt pas mal et assez simple ? Mais une petite chose me dérange : la distance est stockée comme une chaîne de caractères. Il faudrait plutôt que cela soit un int. Il faudrait donc rajouter :

$distance = (int) $distance;
// int(5)

Mais on peut faire ça directement avec une autre méthode.

Pour parser plus finement des chaînes de caractères dont vous connaissez le format global (comme ici avec nos instructions), pas besoin de sortir tout de suite l'artillerie lourde avec les regexp, vous pouvez utiliser la méthode sscanf en lui passant la chaîne à traiter ainsi que son format :

$var = 'forward 5';
list($direction, $distance) = sscanf($var, '%s %d');

/*
$direction => string(7) "forward"
$distance => int(5)
*/

Ici, on s'attend à avoir une chaîne de caractère (%s) suivi d'un espace et d'un entier (%d). Et on voit bien que $distance est directement converti en entier ! Exactement ce que l'on voulait !

La liste des spécificateurs de format est fournie sur le site officiel de PHP sur la page de la fonction printf.

Vous aimeriez progresser en PHP ? Mais vous ne savez pas comment vous y prendre ?

S'entraîner pour progresser en PHP

Mon programme "S'entraîner pour progresser en PHP" est disponible. Il vous permettra de recevoir chaque semaine un kata de code directement dans votre boîte mail, ainsi que des aides à la réalisation, des vidéos explicatives et des défis supplémentaires.

Reçois dès maintenant un kata gratuit en cliquant sur le bouton ci-dessous.