Smarty/Динамический индекс массива

mike

pmcoder
Smarty/Динамический индекс массива

Цель - не создавать вложенных циклов.
Задача:
Есть 2 массива $array1 и $array2. Причем все элементы $array2 есть в $array1. Нужно выделить все элементы $array1,которые встречаются в $array2. Чтобы избежать вложенных циклов на ПХП сделал бы так:
PHP:
// Преобразование элементов массива в индексы 
foreach($array2 as $key=>$value) $tmp[$value]=1;
$array2 = $tmp;
// Поиск вхождений
foreach($array1 as $key=>$value){
  if(isset($array2[$value])){.........}
}
Как в смарти осуществить поиск вхождений? Пробовал такой код - ошибка - синтаксис СМАРТИ не позволяет:
PHP:
{section name=i loop=$array1}
 {if isset($array2[$array1[i]]}........{/if}
{/section}
Вообще было сделано вложенным циклом, но массивы большие, тормозит...
 

alexhemp

Новичок
ошибка потому что написал в качестве индекса i а не $i

исправь ошибку и попробуй снова. Я делал что-то наподобии, в последних версиях смарти синтаксис с массивами сложный работает.

можно даже записать так

isset($array2.$array1.$i) - просто меньше путаницы будет ;-)
 

mike

pmcoder
ошибка потому что написал в качестве индекса i а не $i
Не думаю, что это ошибка, i - это не переменная, а имя section и пишется без $.
Кстати ошибка и появляется, когда в [ ] появляется переменная с $.
Счас попробую $array2.$array1.$i

-~{}~ 18.08.05 11:57:

Не катит... Warning: Illegal offset type in...
Вот оригинальный код:
PHP:
{section name=i loop=$press}
 <option value="{$press[i].press_id}"
 {if isset($adv_recip.$press[i].press_id)}selected{/if}> {$press[i].press_name}
{/section}
Массивы:
{$adv_recip}
Array (5)
7 => 1
6 => 1
5 => 1
4 => 1
3 => 1

{$press}
Array (7)
0 => Array (16)
press_id => 1
press_name => Комсомолькая Правда
...
1 => Array (16)
press_id => 3
press_name => Труд
...

На мой взгляд было бы правильно:
{if isset($adv_recip[$press.press_id])}selected{/if}
НО ТАК НЕ РАБОТАЕТ: Smarty error: [in шаблон.html line 93]: syntax error: unbalanced parenthesis in if statement...
без isset:
syntax error: unidentified token '[$press.press_id]'
 

alexhemp

Новичок
Ну да, я section с foreach перепутал ;-)

попробуй использовать foreach, он проще - сразу в переменную закидывает текущий элемент

к примеру

{foreach item=item from=$press}
{if isset($adv_recip[$item.press_id])}selected{/if}
{/foreach}

У меня подобное работает, даже еще сложнее :)
 

alexhemp

Новичок
mike

Я думаю и section можно заставить работать, нужно только поразбираться... скорее всего просто нужно через assign вычислить индекс. ;-)

Вообще нужно стремиться использовать foreach - ибо код будет просто чище и короче.
 
Сверху