Aktueller Standort: Startseite> Neueste Artikel> Array_Slice Die Falle des Rückgabewerts, ohne das ursprüngliche Array zu ändern

Array_Slice Die Falle des Rückgabewerts, ohne das ursprüngliche Array zu ändern

gitbox 2025-05-26

In der PHP -Entwicklung ist die Funktion array_slice eine sehr praktische Array -Betriebsfunktion, mit der ein bestimmtes Stück Element aus einem Array als Rückgabewert herausgeschnitten werden kann. Viele Anfänger und sogar Zwischenprogrammierer glauben jedoch oft fälschlicherweise, dass Array_Slice das ursprüngliche Array direkt ändert, was zu Verwirrung in der Codelogik und Schwierigkeiten beim Debuggen führt. In diesem Artikel wird die Rückgabewerteigenschaften von Array_Slice ausführlich analysiert, den Grund, warum er das ursprüngliche Array nicht ändert, und Beispiele, um Fallen zu vermeiden.

1. Einführung in die Funktion Array_Slice

Die grundlegende Syntax von Array_Slice lautet wie folgt:

 array array_slice(array $array, int $offset, ?int $length = null, bool $preserve_keys = false)
  • $ Array : Originalarray.

  • $ offset : Die Position, an der die Startabschnitte unterstützt werden, wodurch der Countdown vom Schwanz des Arrays angezeigt wird.

  • $ Länge : Die abgefangene Länge, standardmäßig die Anzahl der verbleibenden Elemente im Array.

  • $ PREISERVE_KEYS : Ob Sie den Schlüsselnamen des ursprünglichen Arrays behalten sollen, Standard False.

Diese Funktion gibt ein neues abgefangenes Array zurück und nicht einen Verweis auf das ursprüngliche Array.

2. Warum ändert Array_Slice das Original -Array nicht?

Array_Slice gibt ein "neues Array" zurück, das aus dem Kopieren der angegebenen Intervallelemente aus dem ursprünglichen Array besteht. Das Array-Kopieren in PHP wird von Wert übergeben (obwohl die zugrunde liegende Implementierung eine Kopie-auf-Schreiben-Optimierung hat) und am bestandenen Array in der Funktion keine Anpassungsvorgänge für die Stelle durchgeführt werden. Mit anderen Worten, die ursprüngliche Absicht von Array_Slice besteht darin, die Integrität und Unveränderlichkeit des ursprünglichen Arrays aufrechtzuerhalten.

Wenn Sie Array_Slice verwenden, erhalten Sie daher das neue Array der abgefangenen Ergebnisse, und das ursprüngliche Array bleibt unverändert.

Beispiel:

 $fruits = ['apple', 'banana', 'cherry', 'date'];
$sliced = array_slice($fruits, 1, 2);

print_r($sliced);
// Ausgabe:
// Array
// (
//     [0] => banana
//     [1] => cherry
// )

print_r($fruits);
// Ausgabe:
// Array
// (
//     [0] => apple
//     [1] => banana
//     [2] => cherry
//     [3] => date
// )

Hier wurde das $ Fruits -Array nicht geändert, und $ Sliced ​​ist das neue Array, das abgefangen wurde.

3.. Häufige Missverständnisse und Fallen

  1. Ich dachte fälschlicherweise, das ursprüngliche Array wurde modifiziert <br> Viele Personen verwenden Array_Slice und drucken das ursprüngliche Array erneut und stellen fest, dass sich das ursprüngliche Array nicht geändert hat. Daher vermuten sie, dass die Codelogik falsch ist. Tatsächlich ändert Array_Slice das ursprüngliche Array nicht.

  2. Versuchen Sie, Array_Slice zu verwenden, um das Array direkt zu ändern. <br> Einige Leute können den folgenden Code schreiben:

     $arr = [1,2,3,4,5];
    $arr = array_slice($arr, 2);
    

    Dies zuweist tatsächlich das Intercept -Ergebnis der ursprünglichen Array -Variablen zurück. Zu diesem Zeitpunkt weist die Variable auf das neue Array auf und das ursprüngliche Array wird verworfen. Wenn Sie das Array "ändern" möchten, ersetzen Sie das ursprüngliche Array tatsächlich durch das Neue Array, anstatt dass die Funktion array_slice selbst das Array ändert.

  3. Ich hoffe, der Schlüsselname bleibt gleich. Vergessen Sie, die Parameter zu übergeben <br> Standardmäßig wird das von Array_Slice redex (ab 0) zurückgegebene Array (ab 0) zurückgegeben, es sei denn, der vierte Parameter ist auf true festgelegt.

     $arr = ['a' => 'apple', 'b' => 'banana', 'c' => 'cherry'];
    $slice = array_slice($arr, 1, 2);
    print_r($slice);
    // Ausgabe:
    // Array
    // (
    //     [0] => banana
    //     [1] => cherry
    // )
    

    Hier wird der Schlüsselname zum numerischen Index. Wenn Sie den Schlüsselnamen beibehalten möchten, sollten Sie den vierten Parameter übergeben:

     $slice = array_slice($arr, 1, 2, true);
    print_r($slice);
    // Ausgabe:
    // Array
    // (
    //     [b] => banana
    //     [c] => cherry
    // )
    

4. Wie kann man Array_Slice richtig verwenden, um Probleme zu vermeiden?

  • Es ist klar, dass Array_Slice ein neues Array zurückgibt und das übergebene Array selbst nicht ändert.

  • Wenn Sie das Array "aktualisieren" möchten, müssen Sie den Wert der ursprünglichen Variablen oder anderen Variablen manuell zuweisen.

  • Beachten Sie, ob Sie den Schlüsselnamen beibehalten und wahr übergeben müssen, um den Verlust des Schlüsselnamens zu vermeiden.

  • Vermeiden Sie Verwirrung mit Array_SPLICE , eine Funktion, die das ursprüngliche Array direkt verändert.

5. Zusammenfassung

Array_Slice ist eine Funktion, um Arrays in PHP abzufangen. Es wurde so konzipiert, dass es einfach das neue Array zurückgibt, ohne das ursprüngliche Array zu ändern. Dieses Design vermeidet Nebenwirkungen und macht den Code sicherer und wartbar. Wenn Sie dies verstehen, können Entwickler Missverständnisse und Fallen vermeiden, die Array -Interception -Funktion korrekt verwenden und die Codequalität verbessern.

Wenn Sie das ursprüngliche Array löschen, einfügen und ändern müssen, können Sie Array_SPLICE verwenden, was die Funktion ist, die das ursprüngliche Array direkt ändert. Für Array Intercept ist Array_Slice das bevorzugte Tool für unveränderliche und zurückkehrende Neuanordnungen.