Php 二维数组的Smarty access特定元素
我有一个smarty模板,其中一个插件为我加载一个数组。这个数组包含一些元素,它们本身是stdClass对象的数组,其他元素只是stdClass对象。例如,我可能有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
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来知道。。。(.)表示数组,(>)表示对象。明白了!