Mi sento vagamente fesso perché sono sicuro che sia una scemenza, ma al momento mi sfugge il perché di questo comportamento:
Codice PHP:
function prova(&$vett)
{
    echo 
'Inizio Prova: '.print_r($vettTRUE)."
"
;
    
$vett = &$vett['a'];
    
$vett = &$vett['a2'];
    echo 
'Fine Prova: '.print_r($vettTRUE)."
"
;
}
$a = array('a' => array('a1' => 5'a2' => array('a3' => 10)));
$b = &$a;
echo 
'Prima: '.print_r($bTRUE)."
"
;
prova($b);
echo 
'Dopo: '.print_r($bTRUE)."
"

Stampa:
Prima: Array ( [a] => Array ( [a1] => 5 [a2] => Array ( [a3] => 10 ) ) )
Inizio Prova: Array ( [a] => Array ( [a1] => 5 [a2] => Array ( [a3] => 10 ) ) )
Fine Prova: Array ( [a3] => 10 )
Dopo: Array ( [a] => Array ( [a1] => 5 [a2] => Array ( [a3] => 10 ) ) )
Essendo il parametro formale di prova() per riferimento, mi aspetterei che il valore di $vett assegnato dentro la funzione impostasse anche quello del parametro attuale $b, invece subito dopo la funzione $b è invariato, pur avendolo passato per riferimento a una funzione che lo modifica. Se dentro prova() gli assegno un valore invece che un altro riferimento tutto funziona come previsto.
Perché? :master: