2011-09-28 93 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', 
      ), 
     ), 
    ), 
));