2014-01-04 4 views
1

im вытягивание данных из базы данных, которая включает числа с десятичными знаками и даты.добавление даты и номеров в один и тот же массив

Я использую следующий код:

<?php 
// Main query to pull data from 'tests' table 
    $sql = "SELECT * FROM `tests` WHERE member_id = '1'"; 
    $result = mysql_query($sql) or die ("no query"); 

// Dataset1 
    while($row = mysql_fetch_assoc($result)) 
    { 
     $dataset1[] = array (intval($row['date']),intval($row['test1'])); 
    } 
?> 

этот должен выводить данные, когда я эхо, например:

Дата: 2011-09-15 test1: 1.024

но его на самом деле только вывод из следующего:

дата: 2011 test1: 1

Затем я использую эти данные для построения графиков с использованием FLOT.

<script type="text/javascript"> 
    //Chart1 
    var chart1Options = { 
     series: { 
     lines: { show: true }, 
     color: "#fff", 
     points: { show: true } 
     }, 
      valueLabels: { 
       show: true 
      }, 
    grid: { 
      backgroundColor: { colors: ["#4ca8fa", "#2887da"] }, 
      hoverable: true //IMPORTANT! this is needed for tooltip to work 
    } 
    }; 
    var dataset1 = { label: "Salinity", data: <?php echo json_encode($dataset1); ?>,}; 

    $.plot($("#chart1"), [ dataset1 ], chart1Options); 
</script> 

всякий раз, когда я изменить «intval» график оленья кожа отображать любые данные .....

Кто-нибудь есть опыт или идеи, чтобы помочь мне?

спасибо.

+1

'intval()' возвращает целое значение то, что вы передаете в качестве параметра, так что не должно быть сюрпризом, что он возвращает 1 при передаче 1.024 и т. д. –

ответ

3

В настоящее время, как указано в предыдущих комментариях & ответы, ваш скрипт в настоящее время использует intval(), который преобразует заданное число и пытается разобрать его до ближайшего целого числа , который эффективно будет отогнать ваши знаков после запятой.

Пример из PHP intval() документы:

echo intval(42); // 42 
echo intval(4.2); // 4 

Там в целый ряд различных методов в PHP, чтобы получить десятичные значения место, но ниже я покажу РНР sprintf():

//Input Value: 1.024      
    sprintf("%.2f", $row['test1']); //outputs 1.02 

Во-вторых, вам «Я столкнулся с проблемами с строкой даты, которые вы перейдете в функцию $.plot(). Что вы должны настроить для $.plot, чтобы понять ваше значение времени:

while($row = mysql_fetch_assoc($result)) { 
    $dataset1[] = array(
        strtotime($row['date']) * 1000, 
        sprintf("%.2f", $row['test1']) 
       ); 
} 

Вам нужно добавить jquery.flot.time.js скрипт после объявления вашего jquery.flot.js тоже в изображении ниже, я добавил xaxis иметь формат " время ", чтобы расшифровать отметку времени.

xaxis: { mode: "time", timeformat: "%y/%m/%d" } 

Предоставление вам результат:

enter image description here$.plot() Ссылка: $.plot data-format datetime

+0

все, похоже, работает, но когда я применяю ваш код выше, я получаю выход эха на дату как: [0] => Array ( [0] => 1273096800000 [1] => 1.024 ) –

+1

Длинная дата предназначена, так как '$ .plot' требует отметки времени UNIX в формате javascript (т.е. миллисекунды), поэтому много цифр =) – MackieeE

+0

Отличный ответ. – Mark

0

удалите intval() из вашего кода, за исключением случаев, когда вы хотите, чтобы переменная была принудительно введена в целое число. Целые числа - это целые числа, например 1, 2, 3, 4.

Если вы отправите '1985-12-13' на интвал, вы получите 1985, потому что это отрежет все остальное.

Если вы отправили 1.2345 в intval, вы получите 1, снова, отрезая остальные.

Возможно, вы копировали код, который использовал intval по какой-либо причине, но это ваш код не нужен. Это не делает ничего, кроме испортить ваши результаты. Избавься от них.

Смежные вопросы