Как правильно выводить связанные массивы в Smarty?

zdimon

Новичок
Как правильно выводить связанные массивы в Smarty?

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

Вывожу следующим образом

{foreach from=$ar_user item=Item}
{$Item.name}
{foreach from=$ar_orders item=Itemorder}
{if $Itemorder.user_id==$Item.id}
{$Itemorder.name}
{/if}
{/foreach}
{/foreach}

И меня смущает то что для каждого пользователя я вынужден бежать по всему массиву заказов.
Может есть более оптимальное решение?
 

Alexandre

PHPПенсионер
Может есть более оптимальное решение?
использование смарти - это уже не оптимально...
так что делай, как задумал.

А что собственно необходимо получить на выходе?
 

zdimon

Новичок
Все что нужно получить - получаю, но немогу избавится от необходимости перерывать весь вложенный массив а не только те элементы с нужным ID.
 

kode

never knows best
Может оптимальным решением было-бы на этапе получения инфы из бд сделать вложенный запрос типа "SELECT users.name as user, orders.name as order FROM users, orders WHERE order.user_id = users.id;

{foreach from=$result item=row}
{$row.user} - {$row.order}
{/foreach}

Или пройтись предвартельно:

$result = array();
foreach($users_orders as $order){

$result[$order.user][] = $order;
}

$smarty->assign("result",$result);

а потом

{foreach from=$result item=user_orders key=user_name}
{$user_name}
{foreach from=$user_orders item=order }
{$order.name}
{/foreach}
{/foreach}
 

AmdY

Пью пиво
Команда форума
zdimon В смарти можно днелать как и в РНР {$array1[$arrya2.id]}
kode это не вложенный запрос, а многотабличный и лучше его выполнять с LEFT JOIN, а идея в принципе правильная. Хотя я извращенец, делаю иногда первым способом.
 
Сверху