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!