Pergunta

Estou escrevendo uma função recursiva para construir uma matriz multidimensional. Basicamente, o problema é o seguinte:

function build($term){      
    $children = array();

    foreach ( $term->children() as $child ) {
        $children[] = build($child);
    }

    if(!count($children)){
        return $term->text();
    } else {
        return $term->text() => $children; //obviously, this doesn't work           
    }
}

Pensamentos? Sei que poderia reescrever a estrutura da função para fazê -la funcionar, mas parece que isso deve ser desnecessário.

Foi útil?

Solução

Uma matriz é o único contêiner de pares de valor-chave que o PHP tem a oferecer. Portanto, você precisa usar uma matriz se desejar sua função (pode ser recursiva ou não) para retornar um par de valores-chave.

return array($term->text() => $children);

Outras dicas

function build($term){          
    $children = array();

    foreach ( $term->children() as $child ) {
        $children += build($child);
    }

    if(!count($children)){
        return $term->text();
    } else {
        return array($term->text() => $children); //obviously, this doesn't work               
    }
}

Pelo que entendi da pergunta, é assim que deve ser.

Anexando a recursão e retornando uma matriz.

EDIT: Como um aparte, você pode estar melhor retornando uma matriz, mesmo que a contagem ($ crianças) == 0, isso ficaria em linha todos os seus tipos. caso contrário, você pode obter todos os tipos de erros na linha:

if(!count($children)){
            return array($term->text() => null);

Você pode devolvê -lo assim:

return array($term->text() => $children);

Embora não seja o que você perguntou. Eu acho que você não pode fazer isso sem reescrever partes da sua função, de uma maneira ou de outra.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top