PHP 5.3.3
PHPの配列データを使ってGoogleChartをHeadに仕込んだ関数としてbodyのボタンクリックで利用したいのですがどうすれば良いのでしょうか。bodyで呼び出すことは出来ました。
また今回は省いても動いたので除外しましたが、配列の中にある{ role: 'annotation' } などはどのように組み込めばよいのかよいか分かりましたらあわせて教えていただけると助かります。よろしくお願いします。
補足
MySQLのテーブルにアンケートの回答結果をレコードで持っています。
クロス集計させた結果を動的にグラフ化したいというのか最終形です。
グラフの種類としては100% stacked chartになります。
cf.https://developers.google.com/chart/interactive/docs/gallery/barchart
roleについてはよく理解が出来ていないのですが{}で囲むような記述に対してどの用にセットしたら良いか分からないと言うのが質問の1つです。
頂いた回答を参考にphpのオブジェクトをjavascriptのなかで次のようにセットしてみました。エラーにはなりませんが意図したグラフが描けないのは何が足りなくてそうなっているのか分かりません。原因分かりました
→var options_fullStacked = {opt};誤り
var options_fullStacked =opt;正しい
下のコードは100% stacked chartではなく、普通のstacked chartですがオブジェクトの受け渡し方がおかげさまで理解できましたので最終形として載せます。bodyでもheadでもページ読み込み時にこのコードですとグラフが表示されるようです。
動的にChartを変更するのも簡単ではなさそうですが、こちらを参考に機会があれば作ってみようと思います。
またPHPのオブジェクトをjavascriptの関数の引数として受け渡す方法も分かりましたのでGoogle Chartではないですがコードを載せます。
GoogleChartの場合引数渡しはなぜか同じコードを書いてもうまくいきませんでした、おそらくcallbackや他の仕様とも関係ありそうで奥が深そうなので今回はPHP側でsubプロシジャーを呼ぶ形で作る方法を取りたいと思います。
回答ありがとうございました。
PHP
1<?php 2/* 3 * GoogleChartにPHP配列データをセットしたい 4 * 参考:https://developers.google.com/chart/interactive/docs/gallery/barchart 5 */ 6 $datas = array(); 7 $roles = new stdClass; 8 $roles->role = 'annotation'; 9 $datas[]=array('Genre', 'Fantasy & Sci Fi', 'Romance', 'Mystery/Crime', 'General', 'Western', 'Literature',$roles); 10 $datas[]=array('2010', 10, 24, 20, 32, 18, 5,''); 11 $datas[]=array('2020', 16, 22, 23, 30, 16, 9,''); 12 $datas[]=array('2030', 28, 19, 29, 30, 12, 13,''); 13 $json_php_datas =json_encode($datas); 14 15 $ret = new stdClass; 16 $ret->isStacked = true; 17 $ret->height = 300; 18 $ret->legend = new stdClass; 19 $ret->legend->positioin = 'top'; 20 $ret->legend->maxLines = 3; 21 $ret->hAxis = new stdClass; 22 $ret->hAxis->minValue = 0; 23 $json_php_ret =json_encode($ret); 24?> 25<html> 26 <head> 27 <!--Load the AJAX API--> 28 <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script> 29 <script type="text/javascript"> 30 google.charts.load("current", {packages:["corechart"]}); 31 google.charts.setOnLoadCallback(drawChart); 32 function drawChart() { 33 34 var dd = JSON.parse('<?php echo $json_php_datas; ?>'); 35 var opt = JSON.parse('<?php echo $json_php_ret; ?>'); 36 var data = google.visualization.arrayToDataTable(dd); 37 var view = new google.visualization.DataView(data); 38 var options_fullStacked = opt; 39 var chart = new google.visualization.BarChart(document.getElementById("barchart_values")); 40 chart.draw(view, options_fullStacked); 41 42 } 43 </script> 44 </head> 45 <body> 46 <!--Div that will hold the bar chart--> 47 <div id="barchart_values" style="width: 900px; height: 300px;"></div> 48 </body> 49</html> 50
こちらは引数の受け渡し
PHP
1 <?php 2$ret = new stdClass; 3$ret->cat = array('たま','ニャー'); 4$php_json = json_encode($ret); 5 ?> 6<html> 7 <head> 8 </head> 9 <body> 10 <script type="text/javascript"> 11 function drawChart(php_json) { 12 13 var rets = JSON.parse(php_json); 14 var cats=rets.cat 15 for (var i = 0; i<cats.length;i++){ 16 alert(cats[i]) 17 } 18 } 19 20 </script> 21 <script type="text/javascript">drawChart('<?php echo $php_json ?>')</script> 22 </body> 23</html> 24
回答1件
あなたの回答
tips
プレビュー