Php – How to access a key from multidimensional array in smarty

multidimensional-arrayPHPsmarty

I've got the following multidimensional array named $cs_map_data in PHP file and I've assigned it to the smarty template:

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] => 
                        )

                )

        )

)

Now I want to access the value of key [cs_map_id] and [subject_name]of every element in smarty template. I tried using foreach but couldn't get the value from key [cs_map_id] and [subject_name].
Can anyone help me on how should I access thee value of key [cs_map_id] and [subject_name] in foreach loop in smarty.
Code written by me in smarty template is as follows :

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

Can any one help me on how to use both the key's values in forech in smarty template?
Thanks in advance.

Best Answer

This will work in Smarty 2 and 3. The {foreach} changed a lot between versions, but {section} works the same.

{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

This SHOULD work to loop through your array...

The smarty manual for sections: http://www.smarty.net/docsv2/en/language.function.section.tpl

Good luck!