{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 ```