In PHP wird die Funktion array_fill () normalerweise verwendet, um ein Array schnell zu füllen, das drei Parameter akzeptiert: den Startindex, die Länge des Arrays und den Wert der Füllung. Wenn wir ein Array mit Referenztypdaten füllen, können wir auf das Problem der Referenzfreigabe stoßen. Das heißt, wenn wir ein Element im Array ändern, kann es die Werte anderer Elemente beeinflussen, da sie dieselbe Referenz teilen.
<?php
// Definieren Sie ein Array
$reference = [];
// verwenden array_fill Füllen Sie das Array
$size = 5;
$reference = array_fill(0, $size, []);
// Ändern Sie das erste Element des Arrays
$reference[0]['name'] = 'John';
// Drucken Sie ein Array
print_r($reference);
?>
Wenn Sie den oben genannten Code ausführen, werden Sie feststellen, dass alle gefüllten Elemente tatsächlich auf dieselbe Array -Referenz hinweisen. Nach der Änderung von $ referenz [0] werden auch alle anderen Elemente geändert. Dies ist die Grundursache für das Problem der Anführungsgruppe.
Um das Problem der Referenzfreigabe zu vermeiden, wenn Array_Fill () ein Array füllt, gibt es einige verschiedene Techniken, mit denen sichergestellt werden kann, dass jedes Array -Element eine unabhängige Kopie hat.
Eine gemeinsame Lösung besteht darin , Array_Map () mit anonymen Funktionen zu verwenden, um eine neue Kopie für jedes Element zu erstellen. Dies vermeidet Probleme mit der Referenzfreigabe.
<?php
// Definieren Sie die Größe des Arrays
$size = 5;
// verwenden array_map Füllen Sie das Array,und erstellen Sie für jedes Element eine neue Kopie für jedes Element
$reference = array_map(function() {
return []; // Geben Sie ein neues leeres Array zurück
}, array_fill(0, $size, null));
// Ändern Sie das erste Element des Arrays
$reference[0]['name'] = 'John';
// Drucken Sie ein Array
print_r($reference);
?>
Diese Methode erstellt ein neues Array für jedes Array -Element über Array_Map () , wodurch Probleme mit der Referenzfreigabe vermieden werden.
Eine andere Möglichkeit besteht darin, Probleme mit dem Austausch von Referenzen zu vermeiden, indem das Array manuell besiedelt wird. Diese Methode stützt sich nicht auf Array_Fill () , sondern verwendet ein Foreach oder für Schleifen, um das Array nacheinander zu füllen.
<?php
// Definieren Sie die Größe des Arrays
$size = 5;
// 手动Füllen Sie das Array
$reference = [];
for ($i = 0; $i < $size; $i++) {
$reference[] = []; // Fügen Sie jedes Mal ein neues leeres Array hinzu
}
// Ändern Sie das erste Element des Arrays
$reference[0]['name'] = 'John';
// Drucken Sie ein Array
print_r($reference);
?>
Der Vorteil dieses Ansatzes besteht darin, dass jedes Mal eine Neuarray -Instanz erstellt wird, ohne dass ein Referenzfreigabeproblem verursacht wird.
In PHP kann bei Verwendung von Array_Fill () ein Array gefüllt werden, wenn der gefüllte Wert ein Referenztyp ist, kann dies zu einer gemeinsamen Aufteilung zwischen den Array -Elementen führen, was zu unerwarteten Änderungenproblemen führt. Um dieses Problem zu vermeiden, können wir array_map () verwenden oder das Array manuell füllen, um sicherzustellen, dass jedes Element eine separate Kopie ist.
Mit diesen Methoden können Sie Array -Polster sicherer verwenden, ohne sich über die Probleme mit der Referenzfreigabe zu sorgen.