In PHP ist Array_Fill_Keys () eine sehr praktische Funktion, mit der wir mit den angegebenen Schlüssel schnell ein neues Array erstellen und die Werte aller Schlüssel auf denselben Wert einstellen können. Die Frage lautet also: Können wir die anonyme Funktion (Verschluss) ** als Füllwert in der Funktion array_fill_keys () verwenden?
Die Antwort lautet: Ja , aber es gibt eine Sache zu beachten.
array_fill_keys(array $keys, mixed $value): array
$ Keys ist ein Array, das die Schlüsselnamen enthält, die Sie festlegen möchten.
$ Wert ist der Wert, den Sie jedem Schlüssel zuweisen möchten.
Obwohl Sie eine anonyme Funktion als $ value in array_fill_keys () übergeben können, verhalten Sie sich möglicherweise nicht wie erwartet - sie wird diese anonyme Funktion für jeden Schlüssel nicht ausführen , sondern weist eher die gleiche Funktion auf alle Tasten zu.
<?php
$keys = ['apple', 'banana', 'cherry'];
$array = array_fill_keys($keys, function() {
return rand(1, 100);
});
print_r($array);
Ausgangsergebnis:
Array
(
[apple] => Closure Object
[banana] => Closure Object
[cherry] => Closure Object
)
Wie Sie sehen können, ist der Wert, der jedem Schlüssel entspricht, ein Schließobjekt , nicht das Ausführungsergebnis einer anonymen Funktion. Dies bedeutet, dass Sie dies nicht direkt tun können , wenn Sie möchten, dass jeder Schlüssel einen anderen Wert hat, der durch anonyme Funktionen generiert wird.
Wenn Sie für jeden Schlüssel einen anderen Wert generieren möchten (wie eine andere Zufallszahl), sollten Sie anonyme Funktionen im Traversal ausführen :
<?php
$keys = ['apple', 'banana', 'cherry'];
$array = [];
foreach ($keys as $key) {
$array[$key] = (function() {
return rand(1, 100);
})();
}
print_r($array);
Beispielausgabe:
Array
(
[apple] => 73
[banana] => 25
[cherry] => 89
)
Sie können auch array_map () mit dem Schlüsselnamen -Array verwenden, um zu erreichen:
<?php
$keys = ['apple', 'banana', 'cherry'];
$array = array_combine($keys, array_map(function() {
return rand(1, 100);
}, $keys));
print_r($array);
Angenommen, Sie entwickeln eine kleine Anwendung und jedes Modul benötigt einen Standardprozessor. Sie können sie so schreiben:
<?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);
Ausgangsbeispiel:
Array
(
[news] => https://m66.net/handler/news
[shop] => https://m66.net/handler/shop
[forum] => https://m66.net/handler/forum
)
Array_Fill_Keys () unterstützt das Bestehen in anonymen Funktionen als Werte, führt aber nicht aus.
Wenn Sie dynamische Werte generieren möchten, sollten Sie anonyme Funktionen in Loops oder Array_Map () aufrufen.
Array_Fill_Keys () eignet sich besser für die statische Wertfüllung, während eine dynamische Logik empfohlen wird, durch Traversal verarbeitet zu werden.
Ich hoffe, dieser Artikel kann Ihnen helfen, die Unterschiede in der Nutzung zwischen Array_Fill_Keys () und anonymen Funktionen in PHP besser zu verstehen! Wenn Sie an dieser Art von zugrunde liegenden Verhalten interessiert sind, können Sie auch versuchen, das Verhalten von PHP -Arrays im Gedächtnis tiefer zu verstehen, und Sie können mehr gewinnen.