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

Domenico L. domenico.lorusso at pleiade.it
Mon Feb 5 17:46:02 CET 2007


Ciao all,
    Ipotizzate di avere un array con n elementi e profondità m

Ipotizzate di dover interpretare un input utente del formato: 
ciao[miao][bao]

Che vuol tornami un riferimento a bao.

Ora questa è la funzione che dovrebbe tornare il riferimento... non l'ho 
ancora testata... voi cosa ne dite va?

Ciao

/**
 * funzione che cerca all'interno dell'array $var il nodo che soddifa 
$niddle
 *
 * @param array $var un'array nidificato
 * @param mixed $out variabile che conterrà il puntatore
 * @param string $niddle la stringa che indica che oggetto figlio 
ritornare, es.: ciao[miao][bao]
 * @param bool    $create se a true crea gli elementi se non ci sono
 * @return mixed false in caso di fallimento un puntatore al figlio che 
soddisfi le ricerche
 *
 */


function seekArray(&$var, &$out, $niddle, $create=false){
    #->supponiamo ciao[miao][bao]
    $out=&$var;
    $step=array();
    $er='#^(\w+)((\[\w+\])*)$#sD';
    preg_match_all($er,$niddle,$m);
    if (empty($m[1]) and !$create) return false;
    $step[]=$m[1];#->ciao


    if (!empty($m[2])){
        $niddle=$m[2];#->[miao][bao]
        $er ='#\[(\w+)\]#sD';
        preg_match_all($er,$niddle,$m);
        if (count($m[1])) $step+=$m[1];
    }
    $n=count($step);

    for ($i=0;$i<$n;$i++){
        $niddle=$step[$i];
        if (!isset($out[ $niddle ]))
       
            if (!$create) return false;
            else $out[ $niddle ]=0;
        $out = &$out[ $niddle ];

    }

    return true;

}




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