[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