Função que aceita uma referência a um array, pesquisa o array e retorna uma referência ao resultado da pesquisa?

StackOverflow https://stackoverflow.com/questions/8894219

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.

Foi útil?

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