2015-12-27 3 views
2

Я пытаюсь импортировать данные из массива PHP в графический граф Google JS ... Как только я смогу выяснить, как результаты echo, я смогу его закончить. Результаты предназначены для выглядеть следующим образом:Использование json_encode для графического отображения Google

data.addRows([ 
     [new Date(2014, 0), -.5, 5.7], 
     [new Date(2014, 1), .4, 8.7], 
     [new Date(2014, 2), .5, 12], 
     [new Date(2014, 3), 2.9, 15.3], 
     [new Date(2014, 4), 6.3, 18.6], 
     [new Date(2014, 5), 9, 20.9], 
     [new Date(2014, 6), 10.6, 19.8], 
     [new Date(2014, 7), 10.3, 16.6], 
     [new Date(2014, 8), 7.4, 13.3], 
     [new Date(2014, 9), 4.4, 9.9], 
     [new Date(2014, 10), 1.1, 6.6], 
     [new Date(2014, 11), -.2, 4.5] 
     ]); 

Я в настоящее время я использую JSON_ENCODE для массива, как это:

$data = array("[new Date(2014, 0), -.5, 5.7],', '[new Date(2014, 1), .4, 8.7],"); 
    json_encode($data); 

Что я буду иметь возможность использовать для извлечения данных из моей базы данных в конце концов, и я я пытаюсь повторить такие результаты:

data.addRows([ 
     <? 
     echo str_replace('"', '', json_encode($data)); 
     ?> 
    ]); 

Проблема в том, что ничего не работает? Кто-нибудь знает, что я могу делать неправильно здесь?

+0

Почему бы удалить все кавычки, что делает его invalid javascript – adeneo

+0

Кроме того, почему бы вам эхо вызовы функции из PHP, просто получить метки времени на сервере – adeneo

+0

Вы не можете использовать объекты 'Date' внутри JSON (если они не были сначала инициализированы в PHP и сериализованы для строки) на самом деле, вы можете использовать только простые объекты внутри JSON. –

ответ

1

Вы должны выводить метки времени, вероятно, в миллисекундах, как это то, что поддерживает Javascript

<?php 
    $data = array(
     array(
      mktime(0, 0, 0, 1, 1, 2014) * 1000, 
      -0.5, 
      5.7 
     ), 
     array(
      mktime(0, 0, 0, 2, 1, 2014) * 1000, 
      0.4, 
      8.7 
     ) 
    ); 
?> 

Теперь вы можете просто повторить его, и он волшебным образом превратится в яваскрипта массив, состоящий из массивов

data.addRows(<? echo json_encode($data); ?>); 

Большинство плагинов будут принимать временные метки, если по какой-то причине у вас есть, чтобы иметь объекты даты, вы можете сделать

var result = <? echo json_encode($data); ?>; 

result.forEach(function(arr) { 
    arr[0] = new Date(arr[0]); 
}); 

data.addRows(result); 
1

Во-первых, в вашем текущем коде JSON_ENCODE не делает ничего полезного, но добавляет дополнительные скобки к целой строке. Во-вторых, у вас что-то странное происходит с символами в середине строки. Кроме того, я не понимаю, почему вы должны помещать это предложение в массив. Теперь, при условии, что вы сделали опечатку и массив выглядит следующим образом:

$data = array("[new Date(2014, 0), -.5, 5.7]", "[new Date(2014, 1), .4, 8.7]"); 

Было бы намного проще для вас, чтобы просто цикл через него

foreach($data as $value){ 
    echo $value.","; 
} 
Смежные вопросы