Почему из-за моих данных SQL ось Y моей диаграммы переходит на бесконечность? - PullRequest
2 голосов
/ 07 февраля 2012

Я пытался построить график, используя открытую Flash Chart 2 в Drupal (ну, проблема не связана с Drupal или модулем графиков и диаграмм)

Для графика я выбираю данныеиз базы данных MySQL.Ниже приведена функция, которая получает данные и генерирует график:

function my_module_charts_graphs_test() {

 global $user;
$uname = $user->name;
$sql = "Select total_calorie from health_calorie_consumed where name = '%s'";
$result = db_query($sql,$uname);


  while($row = db_fetch_array($result))
{

    $data[] = $row[total_calorie];

}

$canvas = charts_graphs_get_graph('open-flash');

  $canvas->title = "OpenFlashCharts Chart";
  $canvas->type = "bar_3d";
  $canvas->y_legend = "Y Legend";
  $canvas->colour = '#808000';
  $canvas->width = 700;
  $canvas->height = 300;
  $canvas->y_max=1000;
  $canvas->y_min=0;
  $canvas->y_step=100;
  $canvas->series = array(
    'Some Value' => array(923,623,73,92,5,722,643,156,345),
    //'Page Views' => array_values($data),
  );
  $canvas->x_labels = array('one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine');

  // $canvas->x_labels = array_values($data);

  $out = $canvas->get_chart();

  return $out;


} 

Когда я запускаю код, я получаю следующий график:

preview-1 http://oi43.tinypic.com/2hcfgqp.jpg

Итак, он отлично работает с локально объявленным массивом.Но мне нужно использовать массив из SQL.Поэтому я раскомментирую и изменю $canvas->c_labels и $canvas->series:

 $canvas->x_labels = array_values($data); //$data is array from sql query

'Page Views' => array_values($data)

Теперь, к моему удивлению, я получаю следующий график:

preview-2 http://oi41.tinypic.com/spb42g.jpg

Как мы видим, значения x_axis являются правильными согласно запросу, но y_axis говорит те же значения, что и бесконечность.Почему он это делает?

Есть еще одно лицо этой странной проблемы.Первоначально я думал, что этот подход может не работать с $canvas->series, но я попробовал приведенный ниже код, и он отлично работал:

$array = array(0,0,117,207,130,260,207); //these values are that are fetched from sql
$canvas->series = array(
   'some values'=>array_values($array),
   );

Так что эта проблема "бесконечности" появляется только для массивов, извлеченных из запросов SQL, и толькодля оси Y.

print_r($data) моего SQL выглядит следующим образом:

Array ( [0] => 0 [1] => 0 [2] => 117 [3] => 207 [4] => 130 [5] => 260 [6] => 207 ) 

Ниже приведены некоторые другие комбинации, которые я пробовал для $ canvas-> series и не удалось ...

$test = implode(",",$data); // $data is the array fetched from sql
$abcd = "array(".$test.")"; // array(0,0,117,207,130,260,207)

$canvas->series=>array(
      'some value'=>print($abcd), //i tried to print those values in standard format..:p
      );

'some values'=>$abcd, // doesn't work..!

'some values'=>$data, // doesn't work.!

Таким образом, я попробовал все, что мог придумать, без удачи.

Ответы [ 2 ]

1 голос
/ 08 февраля 2012

вау .. Наконец-то я нашел ответ, благодаря drupal форумам ..:)

Как оказалось, это проблема типа ..!то есть, если я использую следующий код, он работает .. !!

<?php
$data[] = (int) $row[total_calorie];
?>

Я понятия не имею, почему это проблема типа.или причина, почему это работает, но это решает мою проблему ...!Спасибо всем за помощь в решении этой проблемы ..:)

0 голосов
/ 07 февраля 2012

Попробуйте вставить

 $data = array();

До while($row = db_fetch_array($result))

И используйте только

 'Page Views' => $data
...