2011-02-28 89 views
1

我用這個代碼:PHP/Smarty的 - 多陣列和foreach循環需要幫助

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

任何幫助/指針非常感謝!

回答

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回顯。

+0

非常感謝!實際上我試圖把它移植到CodeIgniter,但是我發現我需要改變一些東西。有什麼建議麼? – pepe 2011-02-28 04:40:35

+0

@imcl建立一個數組,然後'join($ array,',')' – alex 2011-02-28 04:49:28

+0

讓它工作完美 - 再次感謝,非常感謝您的支持! – pepe 2011-02-28 05:03:42