Array_Fill () ist eine sehr bequeme Funktion in PHP, mit der ein Array mit angegebenen Werten schnell erzeugt werden kann. Diese Funktion ist jedoch in allen Fällen nicht die beste Wahl. In diesem Artikel wird untersucht, unter welchen Umständen nicht für Array_Fill () und möglicherweise bessere Alternativen geeignet sind.
In PHP lautet die grundlegende Syntax von Array_Fill () wie folgt:
array_fill(int $start_index, int $count, mixed $value): array
Es gibt ein Array zurück, beginnt mit $ start_index , erstellt $ countelemente und setzt den Wert jedes Elements auf $ Value .
Beispiel:
$filled = array_fill(0, 5, 'apple');
// Ausgabe: [0 => 'apple', 1 => 'apple', 2 => 'apple', 3 => 'apple', 4 => 'apple']
Obwohl diese Funktion einfach und effizient erscheinen mag, ist sie in einigen Szenarien möglicherweise nicht das am besten geeignete Werkzeug.
Array_Fill () gilt nicht, wenn die Werte jedes Array-Elements unterschiedlich sind oder ob jeder Schlüssel ein nicht kontinuierlicher oder dynamisch erzeugter Wert ist.
// Beispiel für die Fehlerverwendung(Die Anforderungen verschiedener Werte können nicht erfüllen)
$data = array_fill(0, 3, rand(1, 100));
// Alle Werte werden gleich sein,Zum Beispiel: [0 => 42, 1 => 42, 2 => 42],Anstelle von drei verschiedenen Zufallszahlen
Alternativen:
$data = [];
for ($i = 0; $i < 3; $i++) {
$data[$i] = rand(1, 100);
}
Wenn es notwendig ist, sehr große Arrays zu erzeugen, wie z. B. Millionen von Elementen, ist Array_Fill () schnell, aber die Zuweisung großer Mengen an Speicher kann Leistungengpässe oder Speicherüberläufe verursachen.
Zum Beispiel:
$hugeArray = array_fill(0, 10000000, 0); // Kann Gedächtniserschöpfung verursachen
In diesem Fall ist es am besten, Generatoren zu verwenden, um die Generierung von Werten zu verzögern und den Speicher zu speichern.
Alternative: Verwenden Sie Generatorfunktionen
function generateZeros($count) {
for ($i = 0; $i < $count; $i++) {
yield 0;
}
}
Der Schlüssel von Array_Fill () kann nur eine Ganzzahl von $ start_index sein und kann nicht mit String -Tasten verwendet werden. Wenn Sie Schlüssel wie 'user_1' und 'user_2' als Array -Indizes indexieren müssen, können Sie Array_Fill () nicht verwenden.
Alternativen:
$users = [];
for ($i = 1; $i <= 5; $i++) {
$users['user_' . $i] = 'default';
}
Wenn Sie für jedes Element ein separates Objekt oder ein separates Array sind, erstellt mit Array_Fill () ein Problem mit der Referenzkopie, insbesondere wenn ein Objekt oder ein Referenztyp als Wert verwendet wird.
$filled = array_fill(0, 3, []);
$filled[0]['a'] = 1;
// Ergebnis:$filled[1] Und $filled[2] Es wird auch betroffen sein,Weil sie auf das gleiche Array verweisen
Richtige Möglichkeit, dies zu tun:
$filled = [];
for ($i = 0; $i < 3; $i++) {
$filled[$i] = [];
}
$filled[0]['a'] = 1;
// Andere Elemente sind nicht betroffen
Obwohl Array_Fill () ein leistungsstarkes Werkzeug zum schnellen Aufbau von Arrays ist, gibt es einige Einschränkungen bei der Verwendung. Hier finden Sie eine kurze Liste der gemeinsamen, nicht angewandten Szenarien:
Jedes Element erfordert einen anderen Wert
Arrayschlüssel sind Zeichenfolgen oder formatierte Indizes
Speicheroptimierung ist erforderlich, wenn große Daten verarbeitet werden
Jedes Element ist ein Objekt oder eine Struktur, auf die unabhängig verwiesen wird
Werte müssen berechnet werden oder von der externen Logik abhängen
Nur durch die Auswahl einer geeigneteren Array -Konstruktionsmethode gemäß dem tatsächlichen Szenario können Sie ein PHP -Programm schreiben, das sowohl effizient als auch sicher ist.