[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