PHP – Kaufmännisches Und vor der Variablen in der Foreach-Schleife [duplicate]
Lesezeit: 3 Minuten
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); // 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
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
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.
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
13343700cookie-checkPHP – Kaufmännisches Und vor der Variablen in der Foreach-Schleife [duplicate]yes
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 “