Parfois dans le développement PHP, nous devons convertir une chaîne en tableau. Cela se produit généralement lorsque nous utilisons la fonction eval. La fonction eval peut exécuter une chaîne sous forme de code PHP, afin que nous puissions générer et exécuter dynamiquement du code via des chaînes. Dans certains cas, nous souhaitons exécuter le tableau généré via la fonction eval. À ce stade, nous devons convertir la chaîne en tableau avant de pouvoir l'utiliser dans la fonction eval.
Dans cet article, nous apprendrons comment convertir une chaîne en tableau en utilisant PHP pour mieux utiliser la fonction eval.
1. Utilisez la fonction eval
Avant d'écrire les exemples de code dans cet article, nous devons d'abord comprendre la fonction eval. La fonction
eval est une fonction très puissante en PHP qui peut exécuter n'importe quel code PHP valide. Habituellement, nous verrons que la fonction eval permet de générer dynamiquement du code PHP et de l'exécuter. Par exemple, nous pouvons utiliser la fonction eval pour exécuter le code suivant :
$code = 'echo "Hello, World!";'; eval($code);
Ce code affichera la chaîne "Hello, World!".
Bien que la fonction eval nous permette d'exécuter n'importe quel code PHP de manière très pratique, elle comporte également certains risques de sécurité. Étant donné que la fonction eval peut exécuter n'importe quel code, un utilisateur malveillant peut exécuter le code d'attaque en saisissant un morceau de code malveillant. Par conséquent, vous devez être prudent lorsque vous utilisez la fonction eval.
2. Convertissez la chaîne de la fonction eval en un tableau
Maintenant, supposons que nous utilisons la chaîne de la fonction eval pour générer un tableau, comme le code suivant :
$code = 'array("apple", "banana", "orange")'; $result = eval($code);
Le but de ce code est de créez un tableau contenant trois noms de fruits. Le tableau actuel a été écrit dans la variable $code sous forme de chaîne. Avant de pouvoir utiliser la fonction eval pour exécuter cette chaîne, nous devons la convertir en un véritable tableau.
Heureusement, PHP fournit une fonction appelée unserialize qui peut convertir une chaîne en tableau. unserialize est une fonction de désérialisation en PHP, utilisée pour reconvertir les données sérialisées en variables PHP. Puisque nous allons enregistrer le tableau créé sous forme de chaîne, la fonction de désérialisation nous est utile. Nous pouvons convertir la chaîne en un véritable tableau en utilisant le code suivant :
$code = 'array("apple", "banana", "orange")'; $array = unserialize(sprintf('a:%d:{%s}', count($arr = eval("return $code;")), implode(array_map(static fn($v) => "i:" . strlen($v) . ";s:$v", $arr))));
Enfin, nous pouvons tout rassembler pour terminer le processus dont nous avons besoin.
function codeToArray($code) { return unserialize(sprintf('a:%d:{%s}', count($arr = eval("return $code;")), implode(array_map(static fn($v) => "i:" . strlen($v) . ";s:$v", $arr)))); } $code = 'array("apple", "banana", "orange")'; $result = codeToArray($code); print_r($result); // 输出 ["apple", "banana", "orange"]
3. Explication du code
Dans cette fonction, on obtient le tableau $arr renvoyé par le code via la fonction eval. Nous utilisons ce tableau pour créer une chaîne requise qui stocke les données sérialisées dans un format spécifique.
Il y a ici trois variables qui doivent être expliquées. La première variable est a, ce qui signifie qu'il s'agit d'un tableau PHP. La deuxième variable est %d, qui est un espace réservé dans la chaîne de formatage numérique qui doit être remplacé par une valeur entière. Ici, il est remplacé par le nombre total d'éléments du tableau. La dernière variable est %s, qui est également un espace réservé dans la chaîne de formatage de chaîne, indiquant qu'elle doit être remplacée par une valeur de chaîne. Ici, il est remplacé par l'élément de tableau sérialisé.
Une autre façon d'utiliser la fonction eval est d'utiliser l'opérateur parenthèse pour que la fonction eval renvoie un résultat. Pour rendre notre code encore plus simple, nous pouvons utiliser l'opérateur bracket pour que la fonction eval renvoie un tableau, puis transmettre ce tableau à la fonction de sérialisation.
function codeToArray($code) { return unserialize(sprintf('a:%d:{%s}', count($arr = eval("return ($code);")), implode(array_map(static fn($v) => "i:" . strlen($v) . ";s:$v", $arr)))); } $code = 'array("apple", "banana", "orange")'; $result = codeToArray($code); print_r($result); // 输出 ["apple", "banana", "orange"]
Ici, nous utilisons l'opérateur bracket pour laisser eval renvoyer un tableau. Ainsi, nous n'avons plus besoin d'envelopper le tableau dans eval et d'utiliser simplement le tableau directement.
4. Résumé
Dans cet article, nous avons exploré comment utiliser la fonction de désérialisation pour convertir une chaîne en tableau. C'est une technique très utile lors de l'utilisation de la fonction eval. Si vous devez utiliser la fonction eval en PHP pour exécuter du code et utiliser des tableaux dans ce code, cet article peut vous être utile.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!