Função que aceita uma referência a um array, pesquisa o array e retorna uma referência ao resultado da pesquisa?
-
29-10-2019 - |
Pergunta
Eu preciso de uma função/método de classe que encontre um elemento em um array (com a ajuda de outro array contendo a localização do referido elemento) e retorne uma referência a ele.
Sem sucesso, tentei fazer assim:
$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;
}
A função acima encontra o 'objetivo' com sucesso, mas a referência não é retornada para $ref, em vez disso, $ref está vazio.
Qualquer ajuda é muito apreciada, isso está me impedindo seriamente de concluir meu trabalho.Obrigado.
Solução
Você precisa passar o resultado para a pilha de recursão para a primeira chamada:
private function &locate(&$var, $location) {
if(count($location)) {
$refIndex= array_shift($location);
return $this->locate($var[$refIndex], $location);
} else {
return $var;
}
}
E eu faria a chamada array_shift antes da chamada recursiva.Você sabe, não me sinto confortável com chamadas de função em que os parâmetros mudam dentro da invocação.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow