【问题标题】:Smarty access specific element of second dimension arraySmarty 访问第二维数组的特定元素
【发布时间】: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


    【解决方案1】:

    由于smarty 语法,我不得不非常努力地查看,但我发现{} 中没有你的$memberOrGroup。所以应该是

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

    我希望能解决它。

    【讨论】:

    • 是的,只是注意到我在简化我的用例时不小心把这些都去掉了。我实际上在我的模板文件中有这些。不过谢谢!
    • @Lythithwyn 好的,其他想法:你的 stdClass 可能是一个数组吗?
    【解决方案2】:

    怎么样:

    $memberOrGroup[0]->id
    

    【讨论】:

    • 噢!我新它一定是愚蠢的!我不经常使用 smarty 来知道... (.) 用于数组, (->) 用于对象。明白了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-24
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多