Php 从多维数组创建Html元素

Php 从多维数组创建Html元素,php,html,arrays,multidimensional-array,Php,Html,Arrays,Multidimensional Array,我不知道该怎么解释,但我们开始吧 我有一个数组,如下所示: $arr = array( array('id' => 1, 'content' => '<h1>This is a simple Content</h1>', 'vars' => null, 'path' => 'holders/row.php', 'sub-page' => array(

我不知道该怎么解释,但我们开始吧

我有一个数组,如下所示:

$arr = array(
    array('id' => 1,
        'content' => '<h1>This is a simple Content</h1>',
        'vars' => null,
        'path' => 'holders/row.php',
        'sub-page' => array(
            'id' => 2,
            'content' => '<h1>Sample Body Here</h1>',
            'vars' => '{"title":"Sample Title Here"}',
            'path' => 'holders/box.php',
            'sub-page' => array(
                'id' => 3,
                'vars' => '{"title":"Sample Title NUmber 3 Here"}',
                'content' => '<h1>Again Sample Body Here</h1>',
                'path' => 'holders/box.php'
            )
        )
    )
);
foreach ($arr as &$page) {
    if (isset($page[$keyToParse])) {
        $subMenu = $page[$keyToParse];
        unset($page[$keyToParse]);
        $page['content'] = $page['content'] . $this->parsePage($keyToParse, $subMenu);
        return $page['content'];
    } else {
        $params = strlen($page['vars']) > 0 ? json_decode($page['vars'], true) : [];
        $elementPath = $page['path'];
        $params = array_merge($params, array('content' => $page['content']));
        $page['content'] = callback(function () use ($params, $elementPath) {
            extract($params);
            include($elementPath);
        });

        return $page['content'];
    }
holders/box.php
包含:

<div class="row">
    <?= $content; ?>
</div>
<div class="box lite">
    <div class="box-title">
        <h4><?= $title; ?></h4>

        <div class="tools">
            <a href="javascript:;" class="collapse">
                <i class="fa fa-chevron-up"></i>
            </a>
        </div>
    </div>
    <div class="box-body">
        <?= $content; ?>
    </div>
</div>
函数回调如下所示:

function callback($userfunc)
{
    ob_start();
    $userfunc();
    $return = ob_get_contents();
    ob_end_clean();
    return $return;
}

请帮助我,因为我已经被困很长时间了

你所需要做的就是这样

function renderNode($node){
        ob_start();
        if (isset($node["sub-page"]) && $node["sub-page"]){
                $node["content"] = renderNode($node["sub-page"]);
        }
        extract($node);
        include ($node["path"]);
        return ob_get_clean();
}
然后像这样调用它:

echo renderNode($arr[0]);

废话,我真的认为你应该投资一个模板框架。你真的把事情复杂化了。如果必须,请使用主模板和
sprintf
在组合中编写一个类,然后输出该类。@techouse,您能展示一个包含您的建议的工作示例吗?请避免使用短PHP标记。在某些(我认为大多数)托管服务器上没有启用它们。此外,如果在同一个文件中使用XML和PHP,它们会导致问题。从PHP5.4开始,不管short open tag指令是什么,都会正确解析short echo标记。IMHO在模板中使用短回显语法可以使代码更易于阅读。哇!我不知道会这么简单!我以前没想过这件事,真傻。谢谢OrangepillI我不能给你应得的赏金。在接下来的21小时内就能做到。我明天会把它奖励给你。谢谢你的帮助!
echo renderNode($arr[0]);