将多级数组解析为视图文件

发布于 2024-10-31 14:24:05 字数 548 浏览 2 评论 0原文

我需要将多级数组解析到我的视图文件中。

我的数组可能是这样的:

$test = array(
    1 => array(
        10 => array('text' => 'test'),
        15 => array( 
            12 => array('text' => 'Test')
        ),
        'text' => 'Nr. 1'
    ),
    4 => array(
        14 => array('text' => 'Hello'),
        'text' => 'Nr. 4'
    )
)

这将被传递到一个视图文件,可能看起来像这样:

{test}
    {text}
{/test}

我的问题是,这只会显示第一个级别 - 我想要无限的级别..是否可以在不采取解决方法的情况下实现,我在 PHP 文件中创建 HTML,然后将 HTML 传递到视图文件?

I need to parse a multilevel array to my view file.

My array could be like this:

$test = array(
    1 => array(
        10 => array('text' => 'test'),
        15 => array( 
            12 => array('text' => 'Test')
        ),
        'text' => 'Nr. 1'
    ),
    4 => array(
        14 => array('text' => 'Hello'),
        'text' => 'Nr. 4'
    )
)

This will be passed to a view file, that could look like this:

{test}
    {text}
{/test}

My problem is, that this will only show the first level - I want to have unlimited levels.. Is that possible without making a workaround, where I create the HTML in the PHP-file and then passes the HTML to the view file?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

狠疯拽 2024-11-07 14:24:05

听起来你需要一些递归。

function recurse_output($input, $level = 0) {
    foreach($input as $key => $value) {
        echo "\n", str_repeat(" ", $level);
        echo "<div>{$key} is: ";
        if(is_array($value))
            recurse_output($value, $level + 1);
        else
            echo $value;
        echo str_repeat(" ", $level);
        echo "</div>\n";
    }
}

当针对您的输入运行时,结果是:

<div>1 is: 
 <div>10 is: 
  <div>text is: test  </div>
 </div>

 <div>15 is: 
  <div>12 is: 
   <div>text is: Test   </div>
  </div>
 </div>

 <div>text is: Nr. 1 </div>
</div>

<div>4 is: 
 <div>14 is: 
  <div>text is: Hello  </div>
 </div>

 <div>text is: Nr. 4 </div>
</div>

修改代码以不发出任何内容应该非常简单,除非 $key'text'。我不知道您为视图机制选择了哪种模板系统,但其中大多数都允许类似的递归调用。

It sounds like you need a bit of recursion.

function recurse_output($input, $level = 0) {
    foreach($input as $key => $value) {
        echo "\n", str_repeat(" ", $level);
        echo "<div>{$key} is: ";
        if(is_array($value))
            recurse_output($value, $level + 1);
        else
            echo $value;
        echo str_repeat(" ", $level);
        echo "</div>\n";
    }
}

When run against your input, the result is:

<div>1 is: 
 <div>10 is: 
  <div>text is: test  </div>
 </div>

 <div>15 is: 
  <div>12 is: 
   <div>text is: Test   </div>
  </div>
 </div>

 <div>text is: Nr. 1 </div>
</div>

<div>4 is: 
 <div>14 is: 
  <div>text is: Hello  </div>
 </div>

 <div>text is: Nr. 4 </div>
</div>

It should be pretty simple to modify the code to not emit anything unless $key is 'text'. I don't know what template system you've selected for your view mechanism, but most of them permit similar recursive calling.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文