【发布时间】: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-page和json_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