PHP – Kaufmännisches Und vor der Variablen in der Foreach-Schleife [duplicate]

Lesezeit: 3 Minuten

Benutzer-Avatar
Sachin Sawant

Mögliches Duplikat:

Referenz – Was bedeutet dieses Symbol in PHP?

Ich muss wissen, warum wir das kaufmännische Und vor der Variablen in der Foreach-Schleife verwenden

foreach ($wishdets as $wishes => &$wishesarray) {
    foreach ($wishesarray as $categories => &$categoriesarray) {

    }
}

  • Ein wichtiges Problem dabei ist, dass die Schleifenvariable außerhalb des Schleifenbereichs durchgesickert ist (weil PHP keinen Blockbereich hat, damit die Dinge mehr Spaß machen). Wenn Sie also später der Schleifenvariablen zuweisen, beschädigen Sie das Array. Dies kann sogar passieren, wenn Sie es als Schleifenvariable in einer anderen Schleife verwenden, was zu sehr “lustigen” Fehlern führt. Eine Lösung besteht darin, die Schleifenvariable nach der Schleife zu unset().

    – Mächtiges Schweinefleisch

    3. Oktober 2018 um 10:17 Uhr


  • $array = array(1, 2); foreach ($array als $value) { $value++; } print_r($array); // 1, 2, weil wir über die Kopie des Werts iteriert haben. Dies bedeutet, dass er als Referenz statt als Array-Wert übergeben wird, seine Variable wirkt sich auf den ursprünglichen Array-Wert aus. $array = array(1, 2, 3, 4,5); echo “

    ";  print_r($array);  foreach ($array als &$value) { $value = $value*2;  } echo "
    ";  print_r($array);  // 2, 4,6,8,10, weil wir über Verweise auf tatsächliche Werte von Array iteriert haben
    – Vikas Kumar
    13. Mai um 4:25 Uhr

Benutzer-Avatar
Marius Sakowski

Dieses Beispiel zeigt Ihnen den Unterschied

$array = array(1, 2);
foreach ($array as $value) {
    $value++;
}
print_r($array); // 1, 2 because we iterated over copy of value

foreach ($array as &$value) {
    $value++;
}
print_r($array); // 2, 3 because we iterated over references to actual values of array

Schauen Sie sich die PHP-Dokumente dafür hier an: http://pl.php.net/manual/en/control-structures.foreach.php

  • Stimmt das nicht per Referenz Syntax verursacht häufig Fehler wie: „Kann keine Verweise auf/von String-Offsets erstellen“?

    – Razvan Zamfir

    19. Juli 2017 um 8:57 Uhr


Dies bedeutet, dass sie als Referenz statt als Wert übergeben wird ... Dh jede Manipulation der Variablen wirkt sich auf das Original aus. Dies unterscheidet sich vom Wert, bei dem Änderungen das ursprüngliche Objekt nicht beeinflussen.

Dies wird oft bei Stackoverflow gefragt.

  • "Durch Verweis" bedeutet, dass es sich auf denselben zugewiesenen Speicherblock für die Variable bezieht, auf die verwiesen wird

    – prof

    7. Januar 2012 um 11:27 Uhr

  • im Gegensatz zu "by value", was bedeutet, dass eine Kopie der Variable von PHP in einem neuen Speicherblock erstellt wird.

    – Kai

    7. Januar 2012 um 11:34 Uhr


  • Es gibt zwei Möglichkeiten, wie die Referenz im Beispielcode der Fragen übergeben wird, ich habe beide beschrieben.

    – hakre

    7. Januar 2012 um 11:37 Uhr

  • Wenn Sie wissen, dass "dies bei StackOverflow oft gefragt wird", warum antworten Sie dann darauf? Finden Sie ein geeignetes Duplikat und geben Sie es als Kommentar ein (oder stimmen Sie ab, sobald Sie 3k erreicht haben).

    – Gordon

    7. Januar 2012 um 12:15 Uhr


Es wird verwendet, um Änderungen in einer einzelnen Instanz des Arrays auf das Hauptarray anzuwenden.

Wie:

//Jetzt wirken sich die Änderungen nicht auf das Array $wishesarray aus

foreach ($wishesarray as $id => $categoriy) {
      $categoriy++;
}
print_r($wishesarray); //It'll same as before..

Aber jetzt werden Änderungen auch im Array $wishesarray widergespiegelt

foreach ($wishesarray as $id => &$categoriy) {
      $categoriy++;
}
print_r($wishesarray); //It'll have values all increased by one..

Für den Code in Ihrer Frage kann keine spezifische Antwort gegeben werden, da die innere foreach-Schleife leer ist.

Was ich mit Ihrem Code sehe, ist, dass die innere foreach iteriert über eine Referenz statt auf die übliche Weise.

Ich schlage vor, Sie lesen die foreach PHP Handbuchseitedeckt es alle vier Fälle ab:

foreach($standard as $each);

foreach($standard as &$each); # this is used in your question

$reference = &$standard;
foreach($reference as $each);

$reference = &$standard;
foreach($reference as &$each); # this is used in your question

1334370cookie-checkPHP – Kaufmännisches Und vor der Variablen in der Foreach-Schleife [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy