Использование массива в качестве ключа для второго массива в Smarty (PHP) - PullRequest
1 голос
/ 05 июня 2009

В моем коде запущены два цикла, я хочу использовать элемент из массива в качестве ключа во втором массиве, но не уверен, как это сделать с помощью Smarty.

"$dateAndUserForEdit.$key.edit_id" содержит целое число (извлечено из БД)

Я хочу использовать это значение в качестве ключа во втором цикле, который работает нормально, если я харкодирую в целое число:

{foreach from=$historyOfRepair.9 key=key item=i}

Псевдокод для того, что я пробовал:

{foreach from=$historyOfRepair.{$dateAndUserForEdit.$key.edit_id} key=key item=i}

Но, конечно, это не работает! Кто-нибудь может помочь?

Ответы [ 4 ]

5 голосов
/ 05 июня 2009

Может работать что-то вроде следующего (в настоящее время не может проверить):

{assign var=edit_id value=$dateAndUserForEdit.$key.edit_id}
{foreach from=$historyOfRepair.$edit_id key=key item=i}
1 голос
/ 03 мая 2011

Я не знаю, нужен ли этот трюк для старых версий, но вы можете (как я полагаю уже довольно давно) сделать это:

учитывая, что:

{$someArray.someKey=9}
{$otherArray.9=$someValue}

Эквивалент:

{$otherArray[$someARray.$someKey]=$someValue}
0 голосов
/ 05 июня 2009

Я бы согласился с Арво. Вы захотите присвоить идентификатор временной переменной, чтобы ее можно было использовать в качестве замены в цикле foreach. Обратите внимание, что в его примере кода значение $ key будет заменено ключом текущего элемента массива $ historyOfRepair. В противном случае это работает (проверено тоже :)).

0 голосов
/ 05 июня 2009

Я только комментирую здесь, потому что никто еще не дал вам никакого совета ... Я никогда не использовал Smarty, так как всегда делал свои собственные системы шаблонов (так что я могу быть здесь неосведомлен и мой совет бесполезен) ...

Можете ли вы просто создать свой массив без smarty, а затем передать его Smarty для отображения? Лично, вместо того, чтобы связываться с пользовательским кодом механизма шаблонов, это, вероятно, то, что я бы сделал для чего-то другого, кроме базовых вещей.

...