Il fatto e' che l'array del primo post e' "strano" proprio perche' ha una struttura che non rispecchia una tabella: che senso ha fare un array di nomi e uno di cognomi? Ha molto piu' senso l'altro esempio che hai riportato nell'ultimo post.
Comunque tutto questo non ha nulla a che fare con l'avere indici numerici o no, e' solo una questione di organizzazione dei dati, per esempio il tuo secondo array potrebbe essere anche fatto cosi':
codice:
$array = array(
'KLTPPP4204985' => array (nome => 'pippo' , cognome => 'kiolotas' , eta => 27 , sesso => 'indefinito'),
'RMNMRC4980249' => array (nome => 'marco' , cognome => 'romenola' , eta => 99 , sesso => 'maschio' )
)
dove invece dei semplici indici numerici progressivi ho messo dei (finti) codici fiscali. L'array funziona lo stesso, non e' una questione di for o foreach, ma solo di come viene organizzata la sua struttura.