Funzione che accetta un riferimento a un array, cerca l'array e restituisce un riferimento al risultato della ricerca?
-
29-10-2019 - |
Domanda
Ho bisogno di una funzione / metodo di classe che trova un elemento in un array (con l'aiuto di un altro array contenente la posizione di detto elemento) e restituisce un riferimento ad esso.
senza successo Ho provato a farlo come:
$var = array("foo" => array("bar" => array("bla" => "goal")));
$location = array("foo", "bar", "bla");
...
$ref =& $this->locate($var, $location);
...
private function &locate(&$var, $location) {
if(count($location))
$this->locate($var[array_shift($location)], $location);
else
return $var;
}
.
La funzione sopra riportata con successo rileva l'obiettivo "ma il riferimento non viene restituito a $ ref, invece $ ref è vuota.
Qualsiasi aiuto è molto apprezzato, questo mi sta seriamente di completare il mio lavoro.Grazie.
Soluzione
È necessario passare il risultato nel risultato nello stack di ricorsione alla prima chiamata:
private function &locate(&$var, $location) {
if(count($location)) {
$refIndex= array_shift($location);
return $this->locate($var[$refIndex], $location);
} else {
return $var;
}
}
.
E farei la chiamata array_shift prima della chiamata ricorsiva.Sai, sto a disagio con le chiamate di funzione in cui i parametri cambiano all'interno dell'invocazione.