我有一个聪明的模板,插件为我加载一个数组。这个数组包含一些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])也是如此。
我尝试过多种变体,包括使用部分代替,但我仍然遇到同样的错误。
答案 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