【发布时间】:2011-01-23 23:19:58
【问题描述】:
我有一个 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}
但是,一旦它遇到任何正常替换,例如上面我的 div 标记中具有 $memberOrGroup[0] 之类的数组引用,我就会收到错误“不能将 stdClass 类型的对象用作数组”。我有点到头了,因为我可以 print_r 原始数组,它显示了像上面一样布局的元素。我什至可以使用 {$memberOrGroup[0]|print)r} 在“is_array” if 块中打印_r,它会打印出一个填充了正确数据的 stdClass 对象,并且不会给我一个错误。
我在网上看到了几种使用嵌套 foreach 循环的解决方案,但在我的循环的真实版本中,必须将第二维数组的每个元素放置在某个位置(如 $memberOrGroup[0]有一个特殊的位置,$memberOrGroup[1])也是如此。
我尝试了几种变体,包括改用部分,但我仍然遇到同样的错误。
【问题讨论】:
标签: php multidimensional-array smarty