[Php-it] Elaborare un XML da php4: lentezza e troppe risorse usate

Domenico L. domenico.lorusso at pleiade.it
Mon Mar 12 08:41:47 CET 2007


RedFoxy ha scritto:
>>
>> preg_metch_all('#\<rec\s.*/\>#sUD',$testo,$m);
>>
>> $record=$m[0];
>> $n=count($record);
>> $out=array();
>> for ($i=0;$i<$n;$i++){
>>    preg_match_all('#(\w+)="(.*)"#sUD',$record[$i],$m);
>>    #->io uso $i ma potresti usare una altro campo se hai una chiave
>> primaria per esempio
>>    #->Ci va anche poco ad inserire qui un controllo per vedere che ci
>> siano tutte le chiavi obbligatorie
>>    #->Quello sulla correttezza dei valori magari lo farei dopo cmq
>>    $out[$i]=array_combine($m[1],$m[2] );
>> }
>> unset($m,$record);
>>
>>
>> Ora fai i controlli su $out, al limite puoi metterli su di un file o
>> qualcosa di simile
> sia $testo la parte di testo contenente i record
>
> Lasciando perdere che array_combine e' di php5 e non php4, alla fine 
> chi mi dice dove finisce un rec ed inizia un altro? usare la conta x4 
> (i 4 valori del rec) non e' detto che sia valido in quanto non ci 
> vuole niente che in un rec mi mettano 3 o 5 valori facendo sballare 
> tutto... o sbaglio a pensarla cosi'?
>
Sbagli :-)
Questo ciclo che non ho testato appieno, ti permette di ottenere prima 
tutti i record, successivamente tutti gli attributi, il controllo sugli 
attributi, devi cmq farlo, e non basta vedere se sono 3 o 5 (cosa che si 
fa banalmente con count($m[1]) ) ma leggendo i valori di $m1 e 
controllando che siano quelli che ti aspetti:

my_arrayCombine($key, $val){
    static $myAttribute=array ( elenco val),$n=count($myAttribute);
    $m=count($key);
   
#    Se gli attributi sono tutti obbligatori se m < n puoi già tornare 
errore
    $ret=array();
    for ($i=0;$i<$n;$i++){
        $k=$myAttribute[$k];
        $t=array_search($k,$key);    
        if ($t===false or $t===null){ #->null solo per php < 4.2
            #->torna errore perché manca una chiave importante
        }else{
          $ret[$k]=$val[$t];
        }
    }  
}

Altri eventuali controlli li aggiungi tu.


Però dubito di poterti spiegare meglio se non provi il codice che ti sto 
dicendo

Per il discorso delle if, ad una persona che legge il codice per la 
prima volta credo sia più leggibile un codice di questo tipo:

function
    if (non va qualcosa ) return
    tante rige di codice
end funciton

piuttosto che

function
    if (va tutto bene)
       tante rige di codice
    else
       return errore
    end if
end function


Ciao

-- 
Domenico L.                             icq: 645 44 861

per stupire mezz'ora basta un libro di storia,
io cercai di imparare la Treccani a memoria... [F.d.A.]



More information about the Php-it mailing list