#php #loops #for-loop #smarty
#php #циклы #for-loop #smarty
Вопрос:
Насколько я понимаю, Smarty включает в себя ряд встроенных функций, которые имеют эквиваленты в PHP.
Как мне преобразовать приведенный ниже код обратно в родной PHP? Похож ли «раздел» на цикл for?
<table width="400" border="0">
{section name=x loop=$records}
<tr>
{section name=y loop=$records[x]}
<td align="right">
<input type="checkbox" name="{$records[x][y].prefkey}" {if $records[x][y].prefval eq "on"}checked{/if} />
</td>
<td align="left">
<strong>amp;nbsp;{$records[x][y].prefkey}</strong>
</td>
{/section}
</tr>
{/section}
</table>
Ответ №1:
Вот пример использования простых массивов для ваших объектов данных:
<?php
// generate some test data
$records = array(
array(
array('prefkey'=>"foo",'prefval'=>"on"),
array('prefkey'=>"bar",'prefval'=>"off"),
),
array(
array('prefkey'=>"foo",'prefval'=>"off"),
array('prefkey'=>"bar",'prefval'=>"off"),
),
array(
array('prefkey'=>"foo",'prefval'=>"off"),
array('prefkey'=>"bar",'prefval'=>"on"),
),
);
?>
<table width="400" border="0">
<?php for($x=0; $x<count($records); $x ){ ?>
<tr>
<?php for($y=0; $y<count($records[$x]); $y ){ ?>
<td align="right">
<input type="checkbox" name="<?=$records[$x][$y]['prefkey']; ?>" <?=($re
cords[$x][$y]['prefval'] == "on"? "checked" : "") ?>/></td>
<td align="left">
<strong>amp;nbsp;<?=$records[$x][$y]['prefkey']; ?></strong>
</td>
<?php }?>
</tr>
<?php }?>
</table>
Если данные содержатся в реальных объектах, вам нужно изменить синтаксис средства доступа.
Ответ №2:
это {section name=x loop=$records}{section}
эквивалентно foreach(array_keys($records) as $x) { }
Комментарии:
1. Согласно документации, {section} предназначен для последовательных массивов, а не ассоциативных массивов. smarty.net/docsv2/en/language . function.section.tpl
2. @AJ Ты прав. Спасибо. @Трентон Скотт, согласно документу, это не сработало бы