Dans PHP, array_fill_keys () est une fonction très pratique qui nous permet de créer rapidement un nouveau tableau à l'aide des touches spécifiées et de définir les valeurs de toutes les clés sur la même valeur. La question est donc: pouvons-nous utiliser la fonction anonyme (fermeture) ** comme valeur de remplissage dans la fonction array_fill_keys () ?
La réponse est: oui , mais il y a une chose à noter.
array_fill_keys(array $keys, mixed $value): array
$ Keys est un tableau contenant les noms de clés que vous souhaitez définir.
$ La valeur est la valeur que vous souhaitez attribuer à chaque clé.
Bien que vous puissiez passer une fonction anonyme comme $ valeur dans array_fill_keys () , il peut ne pas se comporter comme vous vous en doutez - il n'exécute pas cette fonction anonyme pour chaque clé , mais attribue plutôt la même référence de fonction à toutes les touches.
<?php
$keys = ['apple', 'banana', 'cherry'];
$array = array_fill_keys($keys, function() {
return rand(1, 100);
});
print_r($array);
Résultat de sortie:
Array
(
[apple] => Closure Object
[banana] => Closure Object
[cherry] => Closure Object
)
Comme vous pouvez le voir, la valeur correspondant à chaque clé est un objet de fermeture , pas le résultat d'exécution d'une fonction anonyme. Cela signifie que si vous voulez que chaque clé ait une valeur différente générée par les fonctions anonymes, vous ne pouvez pas le faire directement.
Si vous souhaitez générer une valeur différente pour chaque clé (comme un nombre aléatoire différent), vous devez exécuter des fonctions anonymes dans la traversée:
<?php
$keys = ['apple', 'banana', 'cherry'];
$array = [];
foreach ($keys as $key) {
$array[$key] = (function() {
return rand(1, 100);
})();
}
print_r($array);
Exemple de sortie:
Array
(
[apple] => 73
[banana] => 25
[cherry] => 89
)
Vous pouvez également utiliser array_map () avec un tableau de nom de clé à réaliser:
<?php
$keys = ['apple', 'banana', 'cherry'];
$array = array_combine($keys, array_map(function() {
return rand(1, 100);
}, $keys));
print_r($array);
Supposons que vous développez une petite application et que chaque module a besoin d'un processeur par défaut, vous pouvez l'écrire comme ceci:
<?php
$modules = ['news', 'shop', 'forum'];
$defaultHandler = function($module) {
return "https://m66.net/handler/{$module}";
};
$config = [];
foreach ($modules as $module) {
$config[$module] = $defaultHandler($module);
}
print_r($config);
Exemple de sortie:
Array
(
[news] => https://m66.net/handler/news
[shop] => https://m66.net/handler/shop
[forum] => https://m66.net/handler/forum
)
array_fill_keys () prend en charge le passage des fonctions anonymes comme des valeurs, mais ne l'exécute pas.
Si vous souhaitez générer des valeurs dynamiques, vous devez appeler des fonctions anonymes dans Loops ou array_map () .
array_fill_keys () convient plus au remplissage de valeur statique, tandis que la logique dynamique est recommandée pour être traitée par traversée.
J'espère que cet article peut vous aider à mieux comprendre les différences d'utilisation entre array_fill_keys () et les fonctions anonymes en php! Si vous êtes intéressé par ce type de comportement sous-jacent, vous pourriez aussi bien essayer de mieux comprendre le comportement des tableaux PHP en mémoire, et vous pourriez en gagner plus.