In PHP ist Array_Fill () eine sehr praktische Funktion, die schnell Arrays mit bestimmten Längen und bestimmten Werten erzeugen kann. Zum Beispiel:
$filledArray = array_fill(0, 5, 'm66.net');
// Ausgabe: ['m66.net', 'm66.net', 'm66.net', 'm66.net', 'm66.net']
Auf der Oberfläche kann es in vielen Szenarien die herkömmliche maßgebliche Schleifenzuweisungsmethode ersetzen. In der tatsächlichen Entwicklung kann Array_Fill () jedoch keine manuellen Schleifen vollständig ersetzen, und der Anwendungsbereich und die Flexibilität haben bestimmte Einschränkungen. Als nächstes werden wir die Einschränkungen von Array_Fill () und den Szenarien diskutieren, dass die manuelle Schleifenzuweisung besser geeignet ist.
Wenn wir ein Objekt mit Array_Fill () füllen, füllt es wiederholt dieselbe Objektreferenz in das Array. Dies bedeutet, dass sich das Ändern eines Elements ändert:
$obj = new stdClass();
$obj->url = 'https://m66.net';
$array = array_fill(0, 3, $obj);
$array[0]->url = 'https://m66.net/changed';
print_r($array); // Alle Elemente von url Alles drehte sich in 'https://m66.net/changed'
**Warum? ** Weil alle Elemente Verweise auf dieselbe $ OBJ sind.
Bei der Verwendung einer manuellen Schleifenzuordnung kann jedes Mal eine neue Instanz generiert werden, um dieses Problem zu vermeiden:
$array = [];
for ($i = 0; $i < 3; $i++) {
$obj = new stdClass();
$obj->url = 'https://m66.net';
$array[] = $obj;
}
Der erste Parameter von Array_Fill () ist der Startindex und kann nicht als nicht numerischer Schlüsselname angepasst werden. Zum Beispiel:
// Will erzeugen ['home' => 'm66.net', 'about' => 'm66.net'] Es ist unmöglich, es zu tun
Zu diesem Zeitpunkt können Sie nur manuelle Methode verwenden:
$keys = ['home', 'about'];
$array = [];
foreach ($keys as $key) {
$array[$key] = 'https://m66.net';
}
Wenn der Array -Wert mit dem Index zusammenhängt, möchten Sie beispielsweise eine URL basierend auf dem Index generieren:
$array = [];
for ($i = 1; $i <= 5; $i++) {
$array[] = 'https://m66.net/page/' . $i;
}
Array_Fill () unterstützt nur feste Werte und kann diese dynamische Logik nicht verarbeiten.
Für den Bau verschachtelter Arrays oder Objekt -Arrays bieten manuelle Schleifen mehr Kontrolle. Zum Beispiel:
Szene | Grund |
---|---|
Objektarray | Vermeiden Sie Nebenwirkungen, die durch Wiederverwendung der Referenz verursacht werden |
Dynamischer Konstruktwert | Unterstützt die Generierung von Inhalten durch Schleifenlogik |
Nicht-Wert-Schlüsselnamen | Array_Fill () unterstützt keine String -Tasten |
Verschachtelte Strukturen oder komplexe Datenstrukturen | Flexible Kontrolle der Struktur |
Interagieren Sie mit anderen Datenquellen | Lesen Sie beispielsweise Daten aus Datenbanken und APIs dynamisch, um Arrays zu füllen |