views:

521

answers:

2

I'm using smarty for my site, and I'm trying to loop through an array to print out table rows...

The array looks like this:

Array
(
    [TM98800G] => Array
        (
            [zid] => Array
                (
                    [0] => 90001
                    [1] => 90002
                    [2] => 90003
                    [3] => 90004
                    [4] => 90005
                )

            [count] => Array
                (
                    [0] => 10
                    [1] => 10
                    [2] => 20
                    [3] => 25
                    [4] => 15
                )

        )
    [TM76654G] => Array
        (
            [zid] => Array
                (
                    [0] => 90301
                    [1] => 90302
                    [2] => 90303
                    [3] => 90304
                    [4] => 90305
                )

            [count] => Array
                (
                    [0] => 25
                    [1] => 25
                    [2] => 20
                    [3] => 35
                    [4] => 45
                )

        )
)

I'm trying to loop through this and print out tables:

<h5>TM98800G </h5>

<table>
<tr>
  <td>90001</td>
  <td>10</td>
</tr>

<tr>
  <td>90002</td>
  <td>10</td>
</tr>

<tr>
  <td>90003</td>
  <td>20</td>
</tr>

<tr>
  <td>90004</td>
  <td>25</td>
</tr>

<tr>
  <td>90005</td>
  <td>15</td>
</tr>
</table>

<h5>TM76654G</h5>
<table>
<tr>
  <td>90301</td>
  <td>25</td>
</tr>

<tr>
  <td>90302</td>
  <td>25</td>
</tr>

<tr>
  <td>90303</td>
  <td>20</td>
</tr>

<tr>
  <td>90304</td>
  <td>35</td>
</tr>

<tr>
  <td>90305</td>
  <td>45</td>
</tr>
</table>

I tried nested foreach statements and played with sections, but I can't figure out how to loop through it correctly...

A: 
foreach($array as $heading => $attrs) {
    echo "<h5>" . $heading . "</h5>";
    echo "<table>";
    for($i=0; $i < count($attrs['zid']); $i++) { // will work as long 
                                                 // as zid and count will 
                                                 // always be the same size
        echo "<tr>";
        echo "<td>" . $attrs['zid'][$i] . "</td>";
        echo "<td>" . $attrs['count'][$i] . "</td>";
        echo "</tr>";
    }
    echo "</table>";
}
W_P
That's not smarty.
Chad Birch
yeah, I know how to do it in php, just having trouble figuring out the smarty way...
TwixxyKit
Ah, i'm sorry, i just figured i'd throw a general solution out there
W_P
+2  A: 
{foreach from=$array key=header item=table}
<h5>{$header}</h5>

<table>
    {foreach from=$table.zid key=k item=zid}
    <tr>
        <td>{$zid}</td>
        <td>{$table.count.$k}</td>
    </tr>
    {/foreach}
</table>
{/foreach}

Should do it I think.

anomareh
Sadly, no... I get this: syntax error: unrecognized tag: $table.count[`$k`]
TwixxyKit
@Knock What version of Smarty are you using?
anomareh
Taking out the backticks worked! Thanks a bunch :)
TwixxyKit
@Knock yeah just realized. Forgot you only need the backticks if you're embedding a var in quotes. No prob.
anomareh
Note that if you are using Smarty3, you can simply use `{foreach $array as $table}`
Andrew Moore