2011-09-28 26 views
0

是我所:PHP給Smarty,顯示我有一些問題,在智者顯示某些嵌套數組結果...這裏一些嵌套數組

$searchResults - 一個數組,其中每行是一個結果集。這裏沒問題。 $searchResults[$row][users][] - 這是我創建的嵌套數組。如果此行的搜索結果存在的用戶,我想顯示每個用戶....

所以,我們在這裏有我的Smarty代碼:

{section name=i loop=$searchResults} 
    {section name=j loop=$searchResults[i].users} 
    {$searchResults[i].users[j].firstName} 
    {/section} 
{/section} 

然而,這似乎並沒有工作對我來說......它會在我的桌子上以瘋狂的方式顯示用戶的結果,而不是放置在放置部分的相同<td></td>之內。

更新 - 使用每個,有更多的代碼...

{section name=i loop=$searchResults} 
    <tr> 
     <td>{$searchResults[i].id}</td> 
     <td>       
      {if $searchResults[i].users} 
       {foreach from=$searchResults[i].users item=user} 
      {$user.firstName} {$user.lastName} <br> 
       {/foreach} 
      {/if} 
     </td> 
     </tr> 
{/section} 

這會顯示這樣一個表:

ID 
ID 
ID 
     Bob Boberton 
     John Appleton 


     Chris Cooley 

     Carl Agley 
     Cynthia Nobody 

當它應該是這樣的:

ID Bob Boberton 
    John Appleton 

ID Chris Cooley 

ID Carl Agley 
    Cynthia Nobody 
+0

這是*精確*聰明的代碼?什麼是瘋狂的輸出?使用該循環,它將逐個打印每個用戶名,而不會使用空格或格式。 – drew010

+0

該循環看起來是正確的,但有時我看到該部分的行爲奇怪,你可以用{foreach}標籤重現它嗎? – Scuzzy

+0

@ drew010「瘋狂」的部分是,所有的行繼續正常顯示/打印,然後我有很多隻有循環數據(每行1個)的空白行。這對我來說毫無意義。 – Shackrock

回答

0

您可以繼續使用另一個foreach爲主循環。我發現他們更容易閱讀並找到問題所在。

{foreach from=$searchResults item=result} 
    <tr> 
     <td>{$result.id}</td> 
     <td> 
      {if $result.users} 
       {foreach from=$result.users item=user} 
        {$user.firstName} {$user.lastName}<br/> 
       {/foreach} 
      {/if} 
     </td> 
    </tr> 
{/foreach} 

這麼說,我無法重現與$searchResults是如何描述你的問題;最後你的循環和我的工作都是一樣的。下面是我使用的數組。

$smarty->assign('searchResults', array(
    array(
     'id' => 1, 
     'users' => array(
      array(
       'firstName' => 'Bob', 
       'lastName' => 'Boberton', 
      ), 
      array(
       'firstName' => 'John', 
       'lastName' => 'Appleton', 
      ), 
     ), 
    ), 
    array(
     'id' => 10, 
     'users' => array(
      array(
       'firstName' => 'Chris', 
       'lastName' => 'Cooley', 
      ), 
     ), 
    ), 
    array(
     'id' => 100, 
     'users' => array(
      array(
       'firstName' => 'Carl', 
       'lastName' => 'Agley', 
      ), 
      array(
       'firstName' => 'Cynthia', 
       'lastName' => 'Nobody', 
      ), 
     ), 
    ), 
));