在智能模板中执行数组操作

时间:2012-01-18 11:23:03

标签: php arrays smarty

我正在开发电子机票预订系统。当用户点击故障单状态时,它应该在复选框中显示已预订的座位以及可用的座位。现在我可以使用in_array()函数在PHP中很好地执行此操作,但我需要在不同的地方显示它。我怎么能给他们看?

我同时拥有booked seats arraytotal number of seats。在PHP中,我使用以下代码来显示它们(AJAX):

$cnt = count($booked_seats);
for($i = 1; $i<=$total_seats; $i++) {
  if($i%10 == 0) {
    echo '<br />';
  }
  if(in_array($i,$booked_seats)) {
    echo '<input type="checkbox" disabled="disabled" checked="checked" />'.$i;  
  } else {
    echo '<input type="checkbox" name = "book[]" value = "'.$i.'" />'.$i;
  }
}

2 个答案:

答案 0 :(得分:2)

Smarty中in_array()的语法是:

{if $needle|in_array:$haystack_array}

所以你的循环看起来像这样:

// PHP:

$smarty->assign('total_seats',$total_seats);
$smarty->assign('booked_seats',$booked_seats);

//在模板中:

{foreach from=$total_seats item=seat_no name=seat_no}
  {if $smarty.foreach.seat_no.iteration % 10 == 0} <br /> {/if} 
  {if $smarty.foreach.seat_no.iteration|in_array:$booked_seats}
    <input type="checkbox" disabled="disabled" checked="checked" /> {$smarty.foreach.seat_no.iteration}
  {else}
   <input type="checkbox" name = "book[]" value = "{$smarty.foreach.seat_no.iteration}" /> {$smarty.foreach.seat_no.iteration}
  {/if}
{/foreach}

这是未经测试的,但你明白了......

答案 1 :(得分:0)

在smarty 3的情况下,我的答案与@Quasdunk非常相似,唯一的区别在于in_array方法的语法。 它的形式如下:

{if in_array($needle,$array_element)}.....{/if}

所以你会根据他的解释分配你的内容,但循环也会有所不同,你会改为:

    {foreach $total_seats as $seat}
     {if $seat@iteration%10==0}
       <br />
     {/if}
     {if in_array($seat_no,$booked_seats)}
       <input type="checkbox" disabled="disabled" checked="checked" />{$seat}
     {else}
       <input type="checkbox" value="{$seat}" />{$seat}
     {/if}
   {/foreach}