Smarty доступ к конкретному элементу массива второго измерения - PullRequest
3 голосов
/ 24 января 2011

У меня есть шаблон 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 как массив». Я вроде как на своем конце, так как я могу распечатать исходный массив, и он показывает элементы, расположенные, как указано выше. Я даже могу напечатать внутри «is_array» if block, используя {$ memberOrGroup [0] | print) r}, и он распечатывает объект stdClass, заполненный правильными данными, и не выдает ошибку.

Я видел несколько решений в сети, которые показывают использование вложенных циклов foreach, но в реальной версии моего цикла каждый элемент массива второго измерения должен быть размещен в определенном месте (как в $ memberOrGroup [0] занимает особое место, как и $ memberOrGroup [1]).

Я пробовал несколько вариантов, включая использование разделов, но все равно дошел до той же ошибки.

Ответы [ 2 ]

3 голосов
/ 24 января 2011

Мне пришлось выглядеть очень усердно из-за хитрого синтаксиса, но я вижу, что у вас нет $memberOrGroup внутри {} Так и должно быть

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

Надеюсь, это все исправит.

2 голосов
/ 24 января 2011

А как же:

$memberOrGroup[0]->id
...