Smarty访问第二维数组的特定元素

时间:2011-01-23 23:19:58

标签: php multidimensional-array smarty

我有一个聪明的模板,插件为我加载一个数组。这个数组包含一些elments,它们本身就是stdClass对象的数组,而其他元素只是stdClass对象。例如,我可能有

Array
(
[0] => Array
    (
        [0] => stdClass Object
            (
                [id] => 1
                [avatar_file] => joey_thumb.jpg
                [group] => 0
                [order_in_group] => 0
            )

        [1] => stdClass Object
            (
                [id] => 2
                [avatar_file] => christy_thumb.jpg
                [group] => 0
                [order_in_group] => 1
            )

    )
[1] => stdClass Object
    (
        [id] => 11
        [avatar_file] => angela_thumb.jpg
        [group] => 
        [order_in_group] => 
    )
)

在我的模板中,我有一些效果:

{foreach from=$membersArray item=memberOrGroup}
    {if is_array($memberOrGroup)}
<div>{$memberOrGroup[0].id}</div>
    {else}
<div>{$memberOrGroup.id}</div>
    {/if}
{/foreach}

但是只要它碰到任何正常替换,就像上面的div标签那样有一个像$ memberOrGroup [0]这样的数组引用,我得到错误“不能使用stdClass类型的对象作为数组”。因为我可以print_r原始数组并且它显示了如上所述的元素。我甚至可以在“is_array”中使用{$ memberOrGroup [0] | print)来阻止print_r,并打印出一个用正确的数据填充的stdClass对象,并且不会给我一个错误。

我在网上看到过几个使用嵌套foreach循环的解决方案,但在我的循环的真实版本中,第二个维度数组的每个元素都必须放在某个位置(如$ memberOrGroup [0]中所示)有一个特殊的地方,$ memberOrGroup [1])也是如此。

我尝试过多种变体,包括使用部分代替,但我仍然遇到同样的错误。

2 个答案:

答案 0 :(得分:3)

由于语法巧妙,我必须非常努力,但我发现你$memberOrGroup内没有{} {foreach from=$membersArray item=memberOrGroup} {if is_array($memberOrGroup)} <div>{$memberOrGroup[0].id}</div> {else} <div>{$memberOrGroup.id}</div> {/if} {/foreach} 。所以它应该是

{{1}}

我希望能解决它。

答案 1 :(得分:2)

怎么样:

$memberOrGroup[0]->id