2009-06-04 6 views
1

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

«$dateAndUserForEdit.$key.edit_id» содержит целое число (извлекается из БД)

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

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

Псевдо-код для рода вещи я пытался это:

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

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

ответ

5

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

{assign var=edit_id value=$dateAndUserForEdit.$key.edit_id} 
{foreach from=$historyOfRepair.$edit_id key=key item=i} 
+0

Arvo is right Я столкнулся с той же проблемой, и это было решение, которое я использовал. –

+0

Старый, но нашел его высоко в google: я использовал другое решение без дополнительного назначения. Добавлено это как ответ ниже – Nanne

0

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

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

0

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

1

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

при условии, что:

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

Эквивалент :

{$otherArray[$someARray.$someKey]=$someValue} 
+0

Не работал для меня. Может быть, потому, что ваша версия Smarty отличается от моей? – mrbinky3000

+0

'=' должно быть внутри фигурных скобок, затем оно работает (Smarty 3). Я отредактировал сообщение, чтобы это отразить. Хорошее решение, @Nanne! – johndodo