Lors de l'utilisation de PHP pour le traitement de la table, array_map () est une fonction couramment utilisée et puissante. Il nous permet d'appliquer une fonction de rappel à chaque élément du tableau, ce qui est simple et élégant. Cependant, dans le développement quotidien, si vous traitez des valeurs non scalaires, telles que des tableaux ou des objets dans un rappel, vous pouvez rencontrer certains "ne ressemblant pas à un bug mais confus" et même déclencher une erreur. Cet article vous emmènera pour comprendre ce risque caché en profondeur et comment y faire face en toute sécurité.
En PHP, les valeurs scalaires incluent:
int
flotter
chaîne
bool
Au lieu de valeurs scalaires, ils incluent:
tableau
objet
ressource
null (parfois compter)
Lorsque vous transmettez des valeurs non scalar dans la fonction de rappel de array_map () et utilisez des opérations incompatibles dans la fonction, telles que l'utiliser comme épissage de chaîne, indexation du tableau, codage JSON, etc., il est très susceptible de déclencher une erreur.
Jetons un coup d'œil à l'exemple suivant:
<code> $ data = [['name' => 'tom'], ['name' => 'jerry'], ['name' => 'spike'],]; $ result = array_map (fonction ($ item) {
retour «bonjour». $ article;
}, $ data);
</code>
Vous pouvez vous attendre à la sortie:
[
"Hello, Tom",
"Hello, Jerry",
"Hello, Spike"
]
Mais en fait, ce code déclenchera une erreur:
Warning: Array to string conversion
En effet, l'article $ est un tableau, et vous ne pouvez pas épisser les tableaux directement avec des chaînes. PHP n'autorise pas la conversion implicite des tableaux en chaînes, sauf si vous les traitez manuellement.
Pour éviter cela, assurez-vous simplement que vous avez affaire à des valeurs scalaires ou que vous traitez explicitement des valeurs non scalaires dans le rappel:
Sortir:
[
"Hello, Tom",
"Hello, Jerry",
"Hello, Spike"
]
Sortir:
[
"Data: {\"name\":\"Tom\"}",
"Data: {\"name\":\"Jerry\"}",
"Data: {\"name\":\"Spike\"}"
]
Cette méthode convient à une visualisation rapide de la structure lors du débogage, mais il est recommandé de l'utiliser avec prudence dans la logique métier.
Les valeurs non scalaires sont plus courantes lors du traitement des données par les utilisateurs ou renvoyées par des API externes. Par exemple, vous retirez les données via l'interface suivante:
<code> $ data = json_decode (file_get_contents ('https://m66.net/api/users'), true); </code>La structure de retour peut être un tableau imbriqué. Pour le moment, si vous utilisez Array_Map () directement pour $ DATA sans confirmer la structure, vous êtes très susceptible de marcher sur le point.
array_map () est un outil efficace et élégant, mais il suppose que votre fonction de rappel peut gérer correctement les valeurs entrantes. Si vous passez une valeur non scalaire mais que vous le traitez comme un scalaire, vous pouvez avoir des erreurs d'exécution ou même des erreurs logiques. N'oubliez pas les points suivants:
Assurez-vous que la fonction de rappel a des prédictions sur le type de données de la valeur entrante;
Évitez le traitement implicite des chaînes sur les tableaux ou les objets;
Les données externes sont d'abord structurées puis traitées.
Moins vous écrivez, moins vous faites des erreurs; Plus vous comprenez profondément, plus vous l'utilisez stable. J'espère que cet article vous aidera à voir cette "petite fosse" clairement et à rendre votre code PHP plus robuste.