Pregunta

Estoy escribiendo una función recursiva para construir una matriz multidimensional. Básicamente, el problema es el siguiente:

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           
    }
}

¿Pensamientos? Sé que podría reescribir la estructura de la función para que funcione, pero parece que eso debería ser innecesario.

¿Fue útil?

Solución

Una matriz es el único contenedor de par de valor clave que PHP tiene para ofrecer. Por lo tanto, debe usar una matriz si desea su función (que sea recursiva o no) para devolver un par de valor clave.

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

Otros consejos

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               
    }
}

Por lo que entiendo de la pregunta, así es como debería ser.

Agregar la recursión y devolver una matriz.

Editar: como aparte, es mejor que devuelva una matriz incluso si cuenta ($ niños) == 0, esto obtendría todos sus tipos en línea. De lo contrario, puede obtener todo tipo de errores en el futuro:

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

You could return it like this:

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

Although it's not what you asked. I think you cannot do this without rewriting parts of your function, one way or another.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top