2016-05-20 9 views
1

Ich verwende eine foreach-Schleife mit Referenzierung, dh: foreach($elements as &$item)Var_dump Ausgabe mit foreach Referenzschleife

Nun, wenn ich var_dump($elements); nach dem foreach(), das letzte Element hat immer ein & Zeichen vorangestellt, um es vom Variablentyp ist (&string , &array, &boolean usw.).

Beispiel Ausgabe:

array(4) { 
    [0]=> 
    string(4) "this" 
    [1]=> 
    string(2) "is" 
    [2]=> 
    string(2) "an" 
    [3]=> 
    &string(7) "example" 
} 

Warum ist das und welche Funktionalität/Auswirkungen hat es?

+2

Es ist der Adresszeiger. Sie können 'unset ($ item)' 'um dies zu vermeiden – Thamilan

+0

Was hast du in der foreach-Schleife gemacht ??? –

+0

@thamilian ah okay, ich habe das nicht bemerkt, könntest du das als Antwort hinzufügen? – xorinzor

Antwort

2

Es ist der Adresszeiger. Sie können unset($item) dies vermeiden.

Antworten für Ihre Frage:

1. Warum ist das:

Sie die Referenz im

Warnung Referenz eines $ value

manual finden und das letzte Array-Element bleibt nach der foreach-Schleife gleich . Es wird empfohlen, es durch unset() zu zerstören.

Dies tritt auf, wenn Sie Referenz in Ihrer foreach-Schleife verwenden. Die Referenz befindet sich mit dem letzten Array-Element.

2. Welche Funktionalität/Auswirkungen es hat

diese Situation vor:

<?php 
$arr = array(1, 2, 3, 4); 
foreach ($arr as &$value) { 
} 

print_r($arr); 

foreach ($arr as $value) { 
} 

print_r($arr); 

Ihr ausgegeben:

Array 
(
    [0] => 1 
    [1] => 2 
    [2] => 3 
    [3] => 4 
) 
Array 
(
    [0] => 1 
    [1] => 2 
    [2] => 3 
    [3] => 3 <--- 
) 

Wenn Sie unset verwenden:

<?php 
$arr = array(1, 2, 3, 4); 
foreach ($arr as &$value) { 
} 

print_r($arr); 
unset($value); <--- 

foreach ($arr as $value) { 
} 

print_r($arr); 

Ergebnis wird sein:

Array 
(
    [0] => 1 
    [1] => 2 
    [2] => 3 
    [3] => 4 
) 
Array 
(
    [0] => 1 
    [1] => 2 
    [2] => 3 
    [3] => 4 <--- 
)