Как преобразовать этот умный код обратно в PHP?

#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 Ты прав. Спасибо. @Трентон Скотт, согласно документу, это не сработало бы