【问题标题】:Creating Html Element from multidimensional Array从多维数组创建 Html 元素
【发布时间】:2014-07-06 18:34:50
【问题描述】:

不知道如何解释,但我们开始吧

我有一个数组如下:

$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'
            )
        )
    )
);

我正在寻找的是 数组应该去最深的sub-pagejson_decodevars键并提取为变量并包含文件。

完成后,将输出传递给父级的内容键并再次解析

这基本上是为了创建动态内容

holders/row.php 包含:

<div class="row">
    <?= $content; ?>
</div>

holders/box.php 包含:

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

所需的输出是:

<div class="row">
    <div class="box lite">
        <div class="box-title">
            <h4>Sample Title Here</h4>

            <div class="tools">
                <a href="javascript:;" class="collapse">
                    <i class="fa fa-chevron-up"></i>
                </a>
            </div>
        </div>
        <div class="box-body">
            <h1>Again Sample Body Here</h1>

            <div class="box lite">
                <div class="box-title">
                    <h4>Sample Title NUmber 3 Here</h4>

                    <div class="tools">
                        <a href="javascript:;" class="collapse">
                            <i class="fa fa-chevron-up"></i>
                        </a>
                    </div>
                </div>
                <div class="box-body">
                    <h1>Again Sample Body Here</h1>
                </div>
            </div>
        </div>
    </div>
</div>

到目前为止我尝试了什么

我正在尝试如下循环数组:

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'];
    }

函数回调如下:

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

请帮忙,因为我现在卡了很长时间

【问题讨论】:

  • 废话,我真的认为你应该投资一个模板框架......
  • 你真的把事情复杂化了。如果必须,请使用主模板和sprintf 组合编写一个类,然后输出。
  • @techouse,您能否展示一个暗示您的建议的工作示例
  • 您应该避免使用简短的 PHP 标签。在某些(我认为大多数)托管服务器上未启用它们。此外,如果您在同一个文件中使用 XML 和 PHP,它们会导致问题。 ehow.com/info_12178533_shouldnt-use-php-short-tags.html
  • 从 PHP 5.4 开始,无论短打开标签指令如何,都会正确解析短回显标签。恕我直言,在模板中使用简短的 echo 语法会更容易阅读代码。

标签: php html arrays multidimensional-array


【解决方案1】:

你应该做的就是这样。

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]);

【讨论】:

  • 哇!没想到会这么简单!愚蠢的我以前没有想到这一点。谢谢橙丸
  • 我无法奖励您获得的赏金。将能够在接下来的 21 小时内完成。明天将尝试将其奖励给您。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-03
  • 1970-01-01
相关资源
最近更新 更多