PHP / Smarty - нужна помощь с несколькими массивами и циклом foreach - PullRequest
1 голос
/ 28 февраля 2011

Я использую этот код:

$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 Ответ

2 голосов
/ 28 февраля 2011

Я использовал альтернативный синтаксис структуры управления (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, используя json_encode().

...