1

在这个http://codeigniter.com/user_guide/libraries/parser.html教程中,我们有这个多维数组

$data = array(
          'blog_title'   => 'My Blog Title',
          'blog_heading' => 'My Blog Heading',
          'blog_entries' => array(
                                  array('title' => 'Title 1', 'body' => 'Body 1'),
                                  array('title' => 'Title 2', 'body' => 'Body 2'),
                                  array('title' => 'Title 3', 'body' => 'Body 3'),
                                  array('title' => 'Title 4', 'body' => 'Body 4'),
                                  array('title' => 'Title 5', 'body' => 'Body 5')
                                  )
        );

我们像这样轻松打印他

{blog_entries}
    <h5>{title}</h5>
    <p>{body}</p>
{/blog_entries}

但是如何输出这样的数组http://i.imgur.com/L6i1B.png :?

 $data = array( 
array(
    'user' => array('id' => "1", 'name' => "Test1"
    ),'title' => 'Title 1', 'body' => 'Body 1'),
array(
    'user' => array('id' => "2", 'name' => "Test2"
    ),'title' => 'Title 2', 'body' => 'Body 2'),
array(
    'user' => array('id' => "3", 'name' => "Test3"
    ),'title' => 'Title 3', 'body' => 'Body 3')
);

如果我们尝试做这样的事情

{blog_entries}
    {user}
        {id}
    {/user}
    {title}
    {body}
    <br />
{/blog_entries}

我们会有错误:

Message: Invalid argument supplied for foreach()

啊,在这里找到了类似的问题Extended Template Parser: CodeIgniter... Issue with Nested Arrays

4

2 回答 2

1

此功能包含在内置模板类中。(我不知道您第一次发布问题时它是否存在,但它现在就在那里,我自己使用它。)诀窍在于创建正确的数组结构以传递给解析器。我刚才在一个实时页面中测试了这个例子,在 CI 2.1.3 中 100% 工作。

作为一个具体的例子,考虑这个代码,它显示(以最小的格式)酒店的一系列可用房间,并显示每个房间每天的旅行价格。(在本例中为 2 天。)

{available_rooms}
    <p>{room_type} {total_rate}</p>
    {room_rates}
        <p>${room_rate} {room_date}</p>
    {/room_rates}
    <hr>
{/available_rooms}

输出类似于:

1 King Bed 119.98
 59.99 2013-03-23
 59.99 2013-03-24

1 King Bed 119.98
 59.99 2013-03-23
 59.99 2013-03-24

2 Double Beds 139.98
 69.99 2013-03-23
 69.99 2013-03-24

2 Double Beds 139.98
 69.99 2013-03-23
 69.99 2013-03-24

这是我在本例中成功使用的数组。

> available_rooms > 0 > room_type = 1 King Bed 
> available_rooms > 0 > total_rate = 119.98 
> available_rooms > 0 > room_rates > 0 > room_rate = 59.99 
> available_rooms > 0 > room_rates > 0 > room_date = 2013-03-23 
> available_rooms > 0 > room_rates > 1 > room_rate = 59.99 
> available_rooms > 0 > room_rates > 1 > room_date = 2013-03-24 
> available_rooms > 1 > room_type = 1 King Bed 
> available_rooms > 1 > total_rate = 119.98 
> available_rooms > 1 > room_rates > 0 > room_rate = 59.99 
> available_rooms > 1 > room_rates > 0 > room_date = 2013-03-23 
> available_rooms > 1 > room_rates > 1 > room_rate = 59.99 
> available_rooms > 1 > room_rates > 1 > room_date = 2013-03-24 
> available_rooms > 2 > room_type = 2 Double Beds 
> available_rooms > 2 > total_rate = 139.98 
> available_rooms > 2 > room_rates > 0 > room_rate = 69.99 
> available_rooms > 2 > room_rates > 0 > room_date = 2013-03-23 
> available_rooms > 2 > room_rates > 1 > room_rate = 69.99 
> available_rooms > 2 > room_rates > 1 > room_date = 2013-03-24 
> available_rooms > 3 > room_type = 2 Double Beds 
> available_rooms > 3 > total_rate = 139.98 
> available_rooms > 3 > room_rates > 0 > room_rate = 69.99 
> available_rooms > 3 > room_rates > 0 > room_date = 2013-03-23 
> available_rooms > 3 > room_rates > 1 > room_rate = 69.99 
> available_rooms > 3 > room_rates > 1 > room_date = 2013-03-24
于 2013-03-22T22:26:12.770 回答
0

设置你的阵列更像这样

$data = array( 'user' => array('id' => "1", 'name' => "Test1", 'title' => 'Title 1', 'body' => 'Body 1'),
                         array('id' => "2", 'name' => "Test2", 'title' => 'Title 2', 'body' => 'Body 2'),
                         array('id' => "3", 'name' => "Test3", 'title' => 'Title 3', 'body' => 'Body 3')
);

在那之后,它有点像嵌套 HTML 标签,除了 PHP 中的键-> 值对(如果有意义的话)。

{user}
    <h4>{name} : {id}</h4>
    <span>{title}</span>
    <p>
        {body}
    </p>
{/user}
于 2012-10-22T14:55:33.023 回答