{foreach},{foreachelse}
{foreach}用于循环数组。 {foreach}的语法比{section}循环要更简单和清晰,并且可以使用非数字下标的数组。

{foreach $arrayvar as $itemvar}

{foreach $arrayvar as $keyvar=>$itemvar}

Note:
foreach的语法可以接受没有名称的属性,该语法是Smarty 3新增的。

然而Smarty 2语法 {foreach from=$myarray key="mykey" item="myitem"}也同样支持。

{foreach} 循环可以被嵌套使用.

array变量,一般是数组的值,决定了{foreach} 循环的次数。你也可以传递一个任意的整数来控制循环次数。

如果array数组变量中,没有值的情况下, {foreachelse}将执行。

{foreach}的属性: @index, @iteration, @first, @last, @show, @total.

{foreach}的语法命令: {break}, {continue}.

代替指定key变量,你可以通过 {$item@key}来使用循环的当前key。(见下面的例子).

Note:
$var@property的语法是Smarty 3新增的。然而Smarty 2风格的语法{foreach from=$myarray key="mykey" item="myitem"}, $smarty.foreach.name.property也是支持的。

Note:
即使你在循环语法里{foreach $myArray as $myKey => $myValue} 已经指定了key的变量名,但循环体内$myValue@key还是可用的。

可选标记:

名称说明
nocache关闭{foreach}循环的缓存

简单的{foreach} 循环

控制器:

$arr = array('red', 'green', 'blue');
return View('Home/index')->data(['myColors' => $arr])->get();

模板将顺序输出$myColors。

<ul>
_{foreach $myColors as $color}_
    <li>{$color}</li>
_{/foreach}_
</ul>

输出:

<ul>
    <li>red</li>
    <li>green</li>
    <li>blue</li>
</ul>

使用key变量的例子

$people = array('fname' => 'John', 'lname' => 'Doe', 'email' => 'j.doe@example.com');
return View('Home/index')->data(['myPeople' => $people])->get();

模板将以键值对的方式输出$myPeople

<ul>
_{foreach $myPeople as $value}_
   <li>_{$value@key}_:_{$value}_</li>
_{/foreach}_
</ul>

输出:

<ul>
    <li>fname: John</li>
    <li>lname: Doe</li>
    <li>email: j.doe@example.com</li>
</ul>

多维数组通过item 和 key来嵌套使用{foreach}

多维数组的键一般会对应另一个数组。

$arr = array(
                 array('phone' => '555-555-1234',
                       'fax' => '555-555-5678',
                       'cell' => '555-555-0357'),
                 array('phone' => '800-555-4444',
                       'fax' => '800-555-3333',
                       'cell' => '800-555-2222')
                 );
return View('Home/index')->data(['contacts' => $arr])->get();

模板将输出$contact.

_{foreach $contacts as $contact}_
 _{foreach $contact as $value}_
    _{$value@key}: {$value}_
 _{/foreach}_
_{/foreach}_

上面例子会输出:

  phone: 555-555-1234
  fax: 555-555-5678
  cell: 555-555-0357
  phone: 800-555-4444
  fax: 800-555-3333
  cell: 800-555-2222