Come da topic, codice:
Codice PHP:
// Questa linea stampa correttamente l'array, gli elementi sono visualizzati nell'ordine atteso
print "<pre>";print_r($players);print("</pre>");
foreach ($players as $p)
{
$pass = serialize($p['pass']);
$data = explode('-',$p['data']);
list($y,$m,$d) = $data;
$data = mktime(0,0,0, $m, $d, $y);
$insert .= "(".$p['pid'].",0,'".mysql_escape_string($p['nome'])."','".mysql_escape_string($p['cognome'])."',$data,'m',".$p['altezza'].",".$p['peso'].",'".$passaporto."',".$p['posizione'].",''),";
}
// Questa linea stampa l'array evidenziando un errore nell'ultimo elemento, che è stato sovrascritto con una copia del penunltimo.
print "<pre>";print_r($players);print("</pre>");die();
Il problema è segnalato nel codice, nei commenti: in sintesi io stampo un array prima di un ciclo foreach, e il suo contenuto è corretto; lo stampo subito dopo (senza manipolare alcun elemento) ed il suo contenuto è scombinato.
La cosa curiosa è che commentando tutto il codice del foreach il problema continua a manifestarsi, cioè il solo scorrere gli elementi causa il problema. Ho risolto utilizzando l'alias $p per riferimento ( &$p). Se faccio cosi tutto torna a funzionare.
Quello che va detto è che prima di questa porzione di codice avevo gia ciclato sullo stesso array utilizzando l'alias come riferimento..anche se questo continua a non spiegarmi del tutto il comportamento anomalo, mi da solo un indizio per attribuire le cause a qualcosa
Mi sembra di ricordare che ci fosse qualche problema legato a questo tipo di situazioni..ma proprio non mi viene in mente
E' un bug noto, oppure qualcuno sa spiegarmi cosa succede?
Grazie!