ciao!
grazie ancora per la pazienza
sto testando e cercando di capire il tuo codice modificandolo un po...il lavoro lo svolge abbastanza bene però ci sono alcune parti non chiare tipo la parte relativa al " CASE 'T' //cf è uscito"...
procedendo con ordine: ho modificato un po la stampa a video fin qui tt ok
facendo delle prove se manca un ingresso mi viene stampata la notifica cosi:

"ho l'uscita ma non ho l'entrata! x il cf: luca "

se manca l'entrata l'avviso mi viene stampato in questa maniera:

"entrata: 07/09/2012 07:30 - uscita: ciccio "

io vorrei raggiungere un risultato del genere:

codice:
entrata: N.D. - uscita: 05/04/2012 18:00 luca //ho l'uscita ma nn l'entrata
entrata: 03/09/2012 07:25 - uscita: 03/09/2012 16:01 marco
entrata: 04/09/2012 16:10 - uscita: 04/09/2012 16:12 andrea
entrata: 06/09/2012 07:29 - uscita: 06/09/2012 16:16 gino
entrata: 07/09/2012 07:30 - uscita: N.D. //ho l'entrata ma nn l'uscita
....
....
smanettando ho provato a fare varie modifiche ma niente

qui il mio codice modificato

Codice PHP:
<?php
$sorgente 
'orari.txt';   
$array_righe file($sorgente);  
$array_appoggio = array();
     
foreach(
$array_righe as $key => $tipo

     list(
$tipo$data$ora$cf ) = explode("_"$tipo);   

     if(!
array_key_exists($cf,$array_appoggio))
    
$array_appoggio[$cf] = array();

    switch(
$tipo){
    case 
'I'//cf é entrato
        
$array_appoggio[$cf][] = array('data_in' => $data,'ora_in' => $ora,'data_out'=>null,'ora_out'=>null);
        break;
    case 
'T'//cf è uscito
                    
        //cerco un'entrata senza uscita
        
if(!$array_appoggio[$cf])
        {
            echo 
"ho l'uscita ma non ho l'entrata! x il cf: $cf
"
;
            break;
        }

        
$f false;
        foreach(
$array_appoggio[$cf] as &$value)
        {
            if(!
$value['data_out'])
            {
                
$f true;
                
$value['data_out']=$data;
                
$value['ora_out']=$ora;
                break;
            }
        }        

        if(!
$f)
            echo 
"ho l'uscita ma non ho l'entrata!!! x il cf: $cf
"
;

        break;
    default:
        echo 
"tipo $tipo sconosciuto";
        break;

    }

}


//stampo a video
foreach($array_appoggio as $cf => $entrateUscite){
    
//echo "elenco delle entrate/uscite per il cf $cf 

";
    foreach(
$entrateUscite as $entry)
        echo sprintf("
entrata: %uscita: %
",$entry['data_in'].' '.$entry['ora_in'],$entry['data_out'].' '.$entry['ora_out']. ' '.$cf );
}

?>
e la fonte dati "orari.txt"

codice:
I_03/09/2012_07:25_marco
T_03/09/2012_16:01_marco
I_04/09/2012_16:10_andrea
T_04/09/2012_16:12_andrea
T_05/09/2012_16:03_luca
I_06/09/2012_07:29_gino
T_06/09/2012_16:16_gino
I_07/09/2012_07:30_ciccio
ps. nel case ho messo I = ingresso, T = termine

grazie ancora