CodeIgniter传递多维数组

时间:2012-10-22 14:09:49

标签: arrays codeigniter parsing multidimensional-array foreach

在这个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

2 个答案:

答案 0 :(得分: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}

out out类似于:

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

答案 1 :(得分: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中的key-&gt;值对(如果有意义的话)。

{user}
    <h4>{name} : {id}</h4>
    <span>{title}</span>
    <p>
        {body}
    </p>
{/user}