Bei der Verarbeitung mehrdimensionaler Arrays in PHP erfordert die Initialisierung von Strukturen häufig bestimmte Fähigkeiten. Array_Fill_Keys ist eine sehr bequeme Funktion bei der Initialisierung eines eindimensionalen assoziativen Arrays. Es ermöglicht es uns, ein Array schnell durch ein Array von Schlüsselnamen und einen einheitlichen Anfangswert zu erzeugen. Wenn wir jedoch eine initialisieren müssen, ist die Anwendbarkeit von Array_Fill_Keys es wert, diskutiert zu werden.
In diesem Artikel werden die Anwendungsmethoden und anwendbaren Szenarien von Array_Fill_Keys in der mehrdimensionalen Array-Initialisierung ausführlich vorgestellt und seine Einschränkungen analysiert.
array array_fill_keys(array $keys, mixed $value)
Diese Funktion empfängt zwei Parameter:
$ KEYS : Ein Array mit Schlüsselnamen
$ Wert : Der Wert, der jedem Schlüssel zugewiesen werden muss
Beispiel:
$keys = ['name', 'age', 'gender'];
$result = array_fill_keys($keys, null);
// Ausgangsergebnis
print_r($result);
/*
Array
(
[name] =>
[age] =>
[gender] =>
)
*/
Dieser Ansatz ist sehr geeignet, um eindimensionale Arrays mit einer einheitlichen Struktur zu initialisieren.
Obwohl Array_Fill_Keys selbst verschachtelte Arrays nicht direkt erzeugen kann (dh, kann es nicht mehrdimensionale Strukturen initialisieren), können wir den Zweck der Initialisierung mehrdimensionaler Arrays durch Kombination von Array_Map oder Loops "verkleidet".
Angenommen, wir müssen eine einheitliche Konfigurationsstruktur für mehrere Benutzer initialisieren:
$user_ids = [101, 102, 103];
$config_keys = ['theme', 'language', 'notifications'];
$default_config = array_fill_keys($config_keys, 'default');
$users = array_fill_keys($user_ids, []);
foreach ($users as $id => &$config) {
$config = $default_config;
}
unset($config);
print_r($users);
/*
Array
(
[101] => Array
(
[theme] => default
[language] => default
[notifications] => default
)
[102] => Array
(
[theme] => default
[language] => default
[notifications] => default
)
[103] => Array
(
[theme] => default
[language] => default
[notifications] => default
)
)
*/
$user_ids = [101, 102, 103];
$config_keys = ['theme', 'language', 'notifications'];
$default_config = array_fill_keys($config_keys, 'default');
$users = array_map(function() use ($default_config) {
return $default_config;
}, array_fill_keys($user_ids, null));
print_r($users);
Initialisieren Sie Konfigurationsdaten mit konsistenter Struktur
Erstellen Sie schnell eine Kopie eines 1D -Arrays oder einer 2D -Struktur
FORMULE PRESTART VALUE BONET
Eine verschachtelte Initialisierung wird nicht unterstützt : Mehrschichtige verschachtelte Strukturen (wie Arrays der dritten und vierten Ebene) können nicht direkt erzeugt werden.
Zitatfrage : Wenn der Initialisierungswert ein Array oder ein Objekt ohne eine tiefe Kopie ist, verweist mehrere Schlüssel auf denselben Speicherbereich, und das Ändern eines Werts kann alle anderen Elemente beeinflussen.
Schlüsselwerte unterstützen keine dynamischen Verschachtelungsformate : Für dynamische Nistschlüsselnamen ist eine zusätzliche logische Verarbeitung erforderlich.
Wenn array_fill_keys die multidimensionalen Array -Initialisierungsanforderungen nicht erfüllen kann, können folgende Alternativen berücksichtigt werden:
Aufbau verschachtelter Arrays mit rekursiven Funktionen
Generieren Sie verschachtelte Strukturen mit Array_Reduce dynamisch erzeugen
Initialisierung logische Kapselung mit benutzerdefinierten Klassen
Angenommen, Sie erstellen ein Benutzerberechtigungssystem, und die Erlaubnis jedes Benutzers muss in eine leere Sammlung initialisiert werden. Sie können es so schreiben: