Php 二维数组的Smarty access特定元素

Php 二维数组的Smarty access特定元素,php,multidimensional-array,smarty,Php,Multidimensional Array,Smarty,我有一个smarty模板,其中一个插件为我加载一个数组。这个数组包含一些元素,它们本身是stdClass对象的数组,其他元素只是stdClass对象。例如,我可能有 Array ( [0] => Array ( [0] => stdClass Object ( [id] => 1 [avatar_file] => joey_thumb.jpg

我有一个smarty模板,其中一个插件为我加载一个数组。这个数组包含一些元素,它们本身是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}
{foreach from=$membersArray item=memberOrGroup}
{if是_数组($memberOrGroup)}
{$memberOrGroup[0].id}
{else}
{$memberOrGroup.id}
{/if}
{/foreach}
但是,当它碰到任何普通的替换项(如上面我的div标记中的数组引用,如$memberOrGroup[0])时,我就会得到错误“不能将stdClass类型的对象用作数组”。我有点不知所措了,因为我可以打印原始数组,它显示了如上所示的元素布局。我甚至可以使用{$memberOrGroup[0]| print)r}打印“is_array”if块中的_r,它打印出一个填充了正确数据的stdClass对象,并且不会给我一个错误

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

我尝试了几种不同的方法,包括使用节来代替,但我还是遇到了同样的错误。

关于:

$memberOrGroup[0]->id

由于语法很巧妙,我不得不仔细查看,但我发现您的
$memberOrGroup
中没有
{}
。应该如此

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

我希望这能解决问题。

是的,我只是注意到我在简化用例时意外地忽略了这些。实际上,我的模板文件中有这些。不过,谢谢@Lythithwyn好的,另一个想法:你的stdClass可能是数组吗?Doh!我知道那一定是什么蠢事!我不经常使用smarty来知道。。。(.)表示数组,(>)表示对象。明白了!