PHP для Smarty, отображающий некоторые вложенные массивы - PullRequest
0 голосов
/ 29 сентября 2011

У меня проблемы с отображением результатов вложенных массивов в smarty ... вот что у меня есть:

$searchResults - массив, где каждая строка является результирующим набором. Здесь нет проблем. $searchResults[$row][users][] - это вложенный массив, который я создал. Если для этой строки результатов поиска существуют пользователи, я хочу отобразить каждого пользователя ....

Итак, у нас есть мой умный код:

{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

1 Ответ

0 голосов
/ 29 сентября 2011

Вы можете пойти дальше и использовать другой 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',
            ),
        ),
    ),
));
...