如何从smarty中的多维数组中访问密钥?

时间:2013-05-07 14:20:57

标签: php multidimensional-array smarty

我在PHP文件中有以下名为$cs_map_data的多维数组,我已将其分配给smarty模板:

Array
(
    [2] => Array
        (
            [class_id] => 2
            [class_name] => II
            [class_checked] => 0
            [class_subjects] => Array
                (
                    [0] => Array
                        (
                            [cs_map_id] => 81
                            [subject_name] => 11 Engllish
                            [subject_checked] => 0
                            [teacher_cs_id] => 
                        )

                )

        )

    [3] => Array
        (
            [class_id] => 3
            [class_name] => III
            [class_checked] => 0
            [class_subjects] => Array
                (
                    [0] => Array
                        (
                            [cs_map_id] => 155
                            [subject_name] => Hidi
                            [subject_checked] => 0
                            [teacher_cs_id] => 
                        )

                    [1] => Array
                        (
                            [cs_map_id] => 156
                            [subject_name] => 11 Maths
                            [subject_checked] => 0
                            [teacher_cs_id] => 
                        )

                    [2] => Array
                        (
                            [cs_map_id] => 157
                            [subject_name] => 11 Science
                            [subject_checked] => 0
                            [teacher_cs_id] => 
                        )

                    [3] => Array
                        (
                            [cs_map_id] => 158
                            [subject_name] => 11 Engllish
                            [subject_checked] => 0
                            [teacher_cs_id] => 
                        )

                )

        )

    [4] => Array
        (
            [class_id] => 4
            [class_name] => IV
            [class_checked] => 0
            [class_subjects] => Array
                (
                    [0] => Array
                        (
                            [cs_map_id] => 86
                            [subject_name] => Physics
                            [subject_checked] => 0
                            [teacher_cs_id] => 
                        )

                )

        )

    [6] => Array
        (
            [class_id] => 6
            [class_name] => VI
            [class_checked] => 0
            [class_subjects] => Array
                (
                    [0] => Array
                        (
                            [cs_map_id] => 144
                            [subject_name] => Mathematics
                            [subject_checked] => 0
                            [teacher_cs_id] => 
                        )

                    [1] => Array
                        (
                            [cs_map_id] => 145
                            [subject_name] => dfadadadsagfasrsarasrarBiology
                            [subject_checked] => 0
                            [teacher_cs_id] => 
                        )

                )

        )

    [7] => Array
        (
            [class_id] => 7
            [class_name] => VII
            [class_checked] => 0
            [class_subjects] => Array
                (
                    [0] => Array
                        (
                            [cs_map_id] => 129
                            [subject_name] => Physics
                            [subject_checked] => 0
                            [teacher_cs_id] => 
                        )

                    [1] => Array
                        (
                            [cs_map_id] => 130
                            [subject_name] => Chemistry11
                            [subject_checked] => 0
                            [teacher_cs_id] => 
                        )

                    [2] => Array
                        (
                            [cs_map_id] => 131
                            [subject_name] => 11 Science
                            [subject_checked] => 0
                            [teacher_cs_id] => 
                        )

                )

        )

    [8] => Array
        (
            [class_id] => 8
            [class_name] => VIII
            [class_checked] => 0
            [class_subjects] => Array
                (
                    [0] => Array
                        (
                            [cs_map_id] => 67
                            [subject_name] => Hidi
                            [subject_checked] => 0
                            [teacher_cs_id] => 
                        )

                    [1] => Array
                        (
                            [cs_map_id] => 68
                            [subject_name] => 11 Engllish
                            [subject_checked] => 0
                            [teacher_cs_id] => 
                        )

                )

        )

    [9] => Array
        (
            [class_id] => 9
            [class_name] => IX
            [class_checked] => 0
            [class_subjects] => Array
                (
                    [0] => Array
                        (
                            [cs_map_id] => 87
                            [subject_name] => Mathematics
                            [subject_checked] => 0
                            [teacher_cs_id] => 
                        )

                    [1] => Array
                        (
                            [cs_map_id] => 88
                            [subject_name] => Hidi
                            [subject_checked] => 0
                            [teacher_cs_id] => 
                        )

                    [2] => Array
                        (
                            [cs_map_id] => 89
                            [subject_name] => 11 Science
                            [subject_checked] => 0
                            [teacher_cs_id] => 
                        )

                )

        )

)

现在我想访问smarty模板中每个元素的key [cs_map_id]和[subject_name]的值。我尝试使用foreach但无法从密钥[cs_map_id][subject_name]获取值。 任何人都可以帮助我如何在smarty中的foreach循环中访问键[cs_map_id][subject_name]的值。 我在smarty模板中编写的代码如下:

<table>                         
              <tr>
                 {assign var='i' value=0}
                 {if $cs_map_data}
                 {foreach from=$cs_map_data item="map_data"}
                 {if $i%4 == 0}</tr><tr>{/if}
                 <td align="left" valign="top" width="150">

                  <input type="checkbox" name="cs_map_id[]" id="{$map_data.cs_map_id}" value="{$map_data.cs_map_id}"  onChange="get_test_by_category('{$map_data.cs_map_id}'); return false;" />
                 {$map_data.subject_name}
                 </td>
                 {assign var='i' value=$i+1}
                 {/foreach}
                 {else}
                        <td>
                            <i>No Subject is assigned to the class.</i>
                    </td>
                 {/if}
                </tr>
               </table>

任何人都可以帮助我如何在smarty模板中使用forech中的键值吗? 提前致谢。

1 个答案:

答案 0 :(得分:3)

这将在Smarty 2和3中有效。{foreach}在版本之间发生了很大变化,但{section}的工作方式相同。

{section name=map loop=$cs_map_data}
    <tr>
         <td>{$cs_map_data[map].class_name}</td> //this is the format to access your data from the array
    {section name=subject loop=$cs_map_data[map].class_subjects}
          <td>
                {$cs_map_data[map].class_subjects[subject].subject_name} //this is how to access the entries of your 'inner' array
          </td>
    {/section} //end your nested section
    </tr>
{/section} //end your outer section

这应该可以循环播放你的数组...

部分的智能手册:http://www.smarty.net/docsv2/en/language.function.section.tpl

祝你好运!