PRATIQUE PHP 
PHP : décomposer une chaîne en éléments
 
Comment utiliser strtok() pour obtenir les segments d'un texte, avec de multiples délimiteurs et sans avoir recours aux expressions rationnelles. (27/12/2006)
  Forum

Réagissez dans les forums de JDN Développeurs

L'un des usages premier des langages de programmation reste de traiter des données pour mieux les exploiter ou les présenter à l'utilisateur. Dans ce cadre, il est courant de devoir recourir à une forme même primitive d'analyse d'une chaîne et de ce qui la compose, notamment quand il s'agit de traiter une ligne de commande ou des paramètres d'URL.

PHP hérite pour cela de l'immense et émoulue bibliothèque de fonctions relatives aux chaînes, parmi lesquelles strtok(), qui répond au besoin que nous avons présenté : décomposer une chaînes (STRing) en segments (TOKens). Comme on peut s'y attendre, les usages possibles d'une telle fonction sont multiples.

Son usage est des plus simples, avec deux arguments : le premier est la chaîne à traiter, le second une chaîne contenant les divers délimiteurs à prendre en compte. La fonction renvoie une chaîne contenant le premier segment : il faudra donc l'employer au sein d'une boucle, généralement while(). A noter que tout appel subséquent de la fonction ne nécessite en argument que les délimiteurs, pas la chaîne à traiter qui est conservée par défaut.

Le plus courant, bien entendu, reste l'extraction des mots d'une phrase, avec pour délimiteurs l'espace, le retour à la ligne et/ou la tabulation :
  1. $chaine = "Voici un morceau de code :\n\tvar='a';\n\tvar='b';";
  2. $tok = strtok($chaine, " \n\t");
  3. while ($tok !== false) {
  4.   echo 'Segment = ' . $tok . '<br />';
  5.   $tok = strtok(" \n\t");
  6.   }
Autre usage possible, décomposer une URL afin de récupérer les couple variable-valeur d'une requête GET :
  1. $string = "http://exemple.org/script.php? id=42&lapin=malin&pixies=caribou";
  2. $tok = strtok($string,"?&");
  3. while ($tok !== false) {
  4.   echo "Segment = $tok<br />";
  5.   $tok = strtok("?&");
  6.   }
Cela semble faire de strtok() une alternative surnuméraire à explode() ou split(), mais il faut noter que ces derniers utilisent respectivement une autre chaîne ou une expression rationnelle comme délimiteur. strtok() propose de se servir de caractères, plusieurs à la fois au besoin, de manière plus intuitive qu'avec une expression rationnelle.

Bien qu'un peu rudimentaire d'aspects, strtok() peut trouver ça valeur dans des utilisations spécifiques.
 
Xavier Borderie, JDN Développeurs
 
 
Accueil | Haut de page