Dichiarazione foreach di PHP per riferimento: comportmento imprevisto durante il riutilizzo dell'iteratore

questo codice produce un risultato inaspettato:

$arrays=str_split("abcde"); foreach($arrays as &$item) echo $item; echo "\n"; foreach($arrays as $item) echo $item; 

produzione:

 abcde abcdd 

se usi &$item per il secondo ciclo, tutto funziona correttamente.

Non capisco come questo codice possa influenzare il contenuto di $arrays . Potrei considerare che un implicito unset($header) cancellerebbe l'ultima row ma da where viene il doppio dd ?

Questo potrebbe aiutare:

 $arrays=str_split("abcde"); foreach($arrays as &$item) echo $item; var_dump($arrays); echo "\n"; foreach($arrays as $item) { var_dump($arrays); echo $item; } 

Come puoi vedere dopo l'ultima iterazione $item riferisce al 4 ° elemento di $arrays ( e ).

Dopo di ciò si itera su un arrays e si cambia il quarto elemento in quello corrente . Quindi dopo la prima iterazione del secondo ciclo sarà abcda , ecc. Ad abcdd . E nell'ultima iterazione cambi il 4 ° elemento in 4, come da d a d