PHP: форматирование многомерного массива как HTML? - PullRequest
1 голос
/ 08 июня 2010

Я попытался разобраться в создании рекурсивной функции для обработки форматирования многомерного массива неизвестной глубины в HTML и вложенные Div.Я думал, что это должен быть кусок пирога, но нет.

Вот то, что я придумал так далеко:

function formatHtml($array) {
    $var = '<div>';

    foreach ($array as $k => $v) {

            if (is_array($v['children']) && !empty($v['children'])) {
                formatHtml($v['children']);
            }
            else {
                $var .= $v['cid'];
            }
    }

    $var.= '</div>';

    return $var;
}

А вот мой массив:

Array
(
    [1] => Array
        (
            [cid] => 1
            [_parent] => 
            [id] => 1
            [name] => 'Root category'
            [children] => Array
                (
                    [2] => Array
                        (
                            [cid] => 2
                            [_parent] => 1
                            [id] => 3
                            [name] => 'Child category'   
                            [children] => Array ()
                        )
                )
        )
)

1 Ответ

2 голосов
/ 08 июня 2010

Вам не хватает только одной важной части: когда вы делаете рекурсивный вызов formatHtml(), вы фактически нигде не включаете возвращаемый контент! Добавьте его к $var, и вы получите гораздо лучшие результаты:

function formatHtml($array) {
    $var = '<div>';

    foreach ($array as $k => $v) {

            if (is_array($v['children']) && !empty($v['children'])) {
                $var .= formatHtml($v['children']);
            }
            else {
                $var .= $v['cid'];
            }
    }

    $var.= '</div>';

    return $var;
}
...