PHP / Smarty - 需要多数组和foreach循环的帮助

时间:2011-02-28 04:11:28

标签: php loops foreach smarty

我使用此代码:

$result = mysql_query("SELECT * FROM data WHERE user_id='$user_id'");

$output_array = array();
while ($row = mysql_fetch_array($result)) {
    if(!isset($output_array[$row['plant_id']]) || !is_array($output_array[$row['plant_id']])){
        $output_array[$row['plant_id']] = array();
    }

    $output_array[$row['plant_id']][$row['date']] = $row['value'];
}

获取此数组:

Array
(
    [100] => Array
    (
        [2011, 03, 03] => 111111
        [2010, 12, 03] => 123123
    )

    [101] => Array
    (
        [2011, 01, 01] => 123555
        [2011, 01, 27] => 999
        [2011, 04, 20] => 123555
    )
)

使用Smarty我将这些值循环如下(在JS中):

      {foreach from=$output_array key=plant_id item=date_value}
            name: '{$plant_id}',
            data: [{foreach key=date item=value from=$date_value}
                [Date.UTC({$date}), {$value}],
                {/foreach}]
        {/foreach}

但是现在我希望能够在原始PHP(没有Smarty)上恢复工作 - 有没有人知道如何将这些Smarty循环转换回PHP?

非常感谢任何帮助/指示!

1 个答案:

答案 0 :(得分:2)

我使用了替代控制结构语法(foreach(): ... endforeach而不是foreach() { ... }),因为我相信它在视图中更清晰,并且被广泛使用。

<?php foreach($output_array as $plant_id => $date_value): ?>
   name: '<?php echo $plant_id; ?>',
   date: [<?php foreach($date_value as $date => $value): ?>
          [Date.UTC(<?php echo $date; ?>, <?php echo $value; ?>],
         <?php endforeach; ?>]
<?php endforeach; ?>

顺便说一句,如果这是JavaScript,你应该知道IE在列表中跟踪,时会绊倒。

此外,除了调用Date.UTC之外,您还可以使用json_encode()轻松地将此数据结构作为JSON回显。