2015-09-08 3 views
0

У меня есть Array $array и вы хотите создать диаграмму html5, используя значения этого массива. Для этой цели я использую chart.jsПетля через PHP Массив и отображаемые значения в Javascript-коде

Код, я использую выглядит следующим образом (К сожалению, мне нужно вывести Javascript с помощью PHP):

$chart = ' 
<script> 
var data = { 
    labels: ['."$array[0]".', '."$array[1]".', "..."], 
    datasets: [ 
     { 
      label: "My Chart", 
      fillColor: "rgba(220,220,220,0.5)", 
      strokeColor: "rgba(220,220,220,0.8)", 
      highlightFill: "rgba(220,220,220,0.75)", 
      highlightStroke: "rgba(220,220,220,1)", 
      data: [65, 59, 80, 81, 56, 55, 40] 
     } 
    ] 
}; 
</script>'; 
print_r($chart); 

Это прекрасно работает до сих пор, но массив обновляется с течением времени к моменту времени, и так должен график. Я понял, что мне понадобится цикл для этого, но я не совсем уверен, как запустить цикл в коде Javascript. Это не работает:

labels: ['.for ($i = 0, $i < count($array), $i++) {echo "$array[$i].','"}.']; 
+0

Прежде всего, почему вы не используете шаблонных способности PHP? – PitaJ

+0

В первый раз, когда скрипт отправляется в браузер с некоторыми данными, и эти данные обрабатываются правильно. После этого вам нужно получить другие данные с сервера? Для меня это совершенно непонятно, не возражаете ли вы разработать? – Warrior

+0

Кроме того, вместо отправки всего скрипта клиенту вы можете 'json_encode' значения, которые нужно отобразить, а затем использовать их в своем скрипте. – Warrior

ответ

0

Создать функцию, чтобы вернуть массив печати. На самом деле в коде вы можете удалить эхо.

Обратите внимание, что это быстрый хак и не должен использоваться. Вы должны использовать некоторую функцию шаблонов

function displayMe($ar){ 
    $res = ''; 
    for ($i = 0, $i < count($array)-1, $i++){ 
     $res .= '"'.$array[i].'",'; 
    } 
    return $res . '"'.$array[count($array)-1] . '"'; 
} 

$chart = ' 
<script> 
var data = { 
    labels: ['. displayMe($array).'], 
    datasets: [ 
     { 
      label: "My Chart", 
      fillColor: "rgba(220,220,220,0.5)", 
      strokeColor: "rgba(220,220,220,0.8)", 
      highlightFill: "rgba(220,220,220,0.75)", 
      highlightStroke: "rgba(220,220,220,1)", 
      data: [65, 59, 80, 81, 56, 55, 40] 
     } 
    ] 
}; 
</script>'; 
print_r($chart); 
0

Это не полное решение, но оно должно помочь вам.

Использование шаблонных способности PHP, чтобы сделать вашу жизнь проще:

<?php 

// your code blah blah blah 
// initialize $array, etc 

?> 
<script> 
var data = { 
    labels: [ 
    <?php 
     for ($i = 0, $i < count($array), $i++) { 
     echo $array[$i] . ",\n"; 
     } 
    ?> 
    ], 
    datasets: [ 
    { 
     label: "My Chart", 
     fillColor: "rgba(220,220,220,0.5)", 
     strokeColor: "rgba(220,220,220,0.8)", 
     highlightFill: "rgba(220,220,220,0.75)", 
     highlightStroke: "rgba(220,220,220,1)", 
     data: [65, 59, 80, 81, 56, 55, 40] 
    } 
    ] 
}; 
</script> 
<?php 

// continuation of your php code 
// blah di blah bla 

?> 
0

Это должно работать, но я не могу проверить это сейчас. Вместо «разворачивания» массив самостоятельно, вы можете попробовать так:

$chart = ' 
<script> 
var data = { 
    labels: '.json_encode($array).', 
    datasets: [ 
     { 
      label: "My Chart", 
      fillColor: "rgba(220,220,220,0.5)", 
      strokeColor: "rgba(220,220,220,0.8)", 
      highlightFill: "rgba(220,220,220,0.75)", 
      highlightStroke: "rgba(220,220,220,1)", 
      data: [65, 59, 80, 81, 56, 55, 40] 
     } 
    ] 
}; 
</script>'; 
echo $chart; 

основном json_encode кодирует массив PHP в JavaScript Object, только то, что вам нужно!

Кроме того, print_r не требуется (печать рекурсивно), просто используйте echo (или print)

+0

Wow thats на самом деле довольно аккуратный. Как я могу получить значения вместо объекта, потому что теперь он отображает «[object Object]» – Mugen

+0

'data.labels' - ваш массив, внутри которого есть ваши элементы. Если у вас есть другие вложенные массивы, они будут отображаться как объект в консоли. – Warrior

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