[Php-it] Ricercare "figlio" in un array

Domenico L. domenico.lorusso at pleiade.it
Tue Feb 6 12:29:02 CET 2007


Cristiano Verondini ha scritto:
>    Ho perso il codice, ma il modo in cui hai scritto la funzione è 
> tutt'altro che chiaro. :)
Lo rimando :-) con qualche commento in più ( non è che mi viene in mente 
una approccio molto più chiaro, dovendo anche creare, vedi sotto)

function seekArray(&$var, &$out, $niddle, $create=false){
    #->supponiamo ciao[miao][bao]
    $v=&$var;
    $step=array();
    $er='#^(\w+)((\[\w+\])*)$#sD';

    #->Individuo la prima chiave che non è tra quadre
    preg_match_all($er,$niddle,$m);
    if (empty($m[1][0]) and !$create) return false;
    $step[]=$m[1][0];#->ciao

    #->Se ci sono dati individuo le chiavi successive, che sono tra quadre
    if (!empty($m[2][0])){
        $niddle=$m[2][0];#->[miao][bao]
        $er ='#\[(\w+)\]#sD';
        preg_match_all($er,$niddle,$m);
        if (count($m[1])) $step=array_merge($step,$m[1]);
    }
    #->a questo punto $step è un array che contiene la sequenza dei 
figli da cercare o (se $create è a true) da creare
    $n=count($step);

    #->Questo è a parte che potrei rendere ricorsiva (con l'aggiunta di 
una $er che mi ritorna la prima chiave)
    for ($i=0;$i<$n;$i++){
        $niddle=$step[$i];       
        if (!isset($v[ $niddle ]))
            if (!$create) return false;
            else $v=array( $niddle =>$i);
        $v = &$v[ $niddle ];      

    }
    #->Ora mi aspetto che $out si riferisca a $var['ciao']['miao']['bao']
    $out=&$v;
    return true;
}

In effetti se stampo $out questo contiene 2 che è il valore di 
$var['ciao']['miao']['bao'], ma se poi assegno qualcosa a $out le 
modifiche non si applicano anche a $var['ciao']['miao']['bao']

Ciao

P.S.
    provo a vedere se riesco a fare una implementazione solo ricorsiva

-- 
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