2011-01-23 59 views
3

我有一個聰明的模板,其中一個插件爲我加載一個數組。這個數組包含一些本身就是stdClass對象數組的元素,而其他元素只是stdClass對象。舉例來說,我可能有Smarty訪問第二維數組的特定元素

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的對象作爲數組」。我有些不知所措,因爲我可以打印原始數組,並且顯示了像上面那樣放置的元素。我甚至可以使用{$ memberOrGroup [0] | print)r}在「is_array」if塊中打印print_r,並打印出一個填充了正確數據的stdClass對象,並且不會給我一個錯誤。

我在網上看到了幾個使用嵌套的foreach循環的解決方案,但是在我的循環的實際版本中,第二維數組的每個元素都必須放置在特定的位置(如$ memberOrGroup [0 ]有一個特殊的地方,$ memberOrGroup [1]也是如此)。

我已經嘗試了幾個變體,包括使用部分代替,但我仍然回到相同的錯誤。

回答

2

什麼:

$memberOrGroup[0]->id 
+0

Doh!我新的它一定是愚蠢的!我不常用smarty來知道......(。)是用於數組的,( - >)是用於對象的。疑難雜症! – Matthew 2011-01-23 23:37:41

+0

omg ....這是真的嗎?聽起來如此明顯...... – Marnix 2011-01-23 23:42:54

3

我不得不看起來很辛苦,因爲Smarty的語法,但我看到你沒有你的$memberOrGroup{}。所以它應該是

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

我希望能解決它。