new*_*pie 4 php mysql arrays pdo fusioncharts
我试图使用PHP pdo使用非弃用技术转换由下面的代码获得的数组:
$stm = $conn->prepare("SELECT * FROM mysqltable");
$stm->execute();
$results = $stm->fetchAll(PDO::FETCH_ASSOC);
print_r($results);
Run Code Online (Sandbox Code Playgroud)
使用融合图所需的以下格式
[
{
label: "CJ Anderson",
value: "25"
},
{
label: "Imran Tahir",
value: "25"
},
...
...
]
Run Code Online (Sandbox Code Playgroud)
原始数组如下:
Array (
[0] => Array (
[Id] => 6
[Number] => 1234567890
[Visits] => 1
[Name] => John
)
[1] => Array (
[Id] => 7
[Number] => 1236549871
[Visits] => 9
[Name] => Jerry
)
[2] => Array (
[Id] => 8
[Number] => 2147483647
[Visits] => 3
[Name] => Jane
)
)
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激,谢谢.
编辑:正如我在下面评论.我有一个完整的php文件,如果您手动放入数据,它可以工作.虽然当我放入$ jsonEncodedData时,我无法让它工作.思考?
<html>
<head>
<title>FusionCharts XT - Column 2D Chart - Data from a database</title>
<link rel="stylesheet" type="text/css" href="css/style.css" />
<!-- You need to include the following JS file to render the chart.
When you make your own charts, make sure that the path to this JS file is correct.
Else, you will get JavaScript errors. -->
<script src="fusioncharts/js/fusioncharts.js"></script>
</head>
<body>
<?php
try {
# MySQL with PDO_MYSQL
$mysql_host = 'host';
$mysql_database = 'table';
$mysql_username = 'user';
$mysql_password = 'pass';
$conn = new PDO("mysql:host=$mysql_host; dbname=$mysql_database", $mysql_username, $mysql_password);
// set the PDO error mode to exception
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$conn->exec("SET CHARACTER SET utf8"); // Sets encoding UTF-8
}
catch(PDOException $e) {
echo $e->getMessage();
}
// Form the SQL query that returns the top 10 most populous countries
// Execute the query, or else return the error message.
$stm = $conn->prepare("SELECT Name, Visits FROM mysqltable"); //WHERE Area :SelArea");
$stm->execute();
$results = $stm->fetchAll(PDO::FETCH_ASSOC);
include("fusioncharts.php");
$jsnarray = array();
foreach($results as $k => $v){
$jsnarray[] = array('label' => $results[$k]['Name'], 'value' => $results[$k]['Visits']);
};
$jsonEncodedData=json_encode($jsnarray);
new FusionCharts("type of chart",
"unique chart id",
"width of chart",
"height of chart",
"div id to render the chart",
"type of data",
"actual data");
$columnChart = new FusionCharts(
"column2d",
"ex1" ,
"600",
"400",
"chart-1",
"json",
'{
"chart":
{
"caption":"Harry\'s SuperMart",
"subCaption":"Top 5 stores in last month by revenue",
"numberPrefix":"$",
"theme":"ocean"
},
"data": //$jsonEncodedData}'); <---I tried to insert this after "data":but no results unlike if you put raw data**
[
{
"label":"Bakersfield Central",
"value":"880000"
},
{
"label":"Garden Groove harbour",
"value":"730000"
},
{
"label":"Los Angeles Topanga",
"value":"590000"
},
{
"label":"Compton-Rancho Dom",
"value":"520000"
},
{
"label":"Daly City Serramonte",
"value":"330000"
}
]
}');
// Render the chart
$columnChart->render();
?>
<div id="chart-1"><!-- Fusion Charts will render here--></div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
==============编辑12/28/15 ==========
尝试以下代码没有结果,问题我不应该以"}"结尾,因为它们要求:
$columnChart = new FusionCharts(
"column2d",
"ex1" ,
"600",
"400",
"chart-1",
"json",
'{
"chart":
{
"caption":"Harry\'s SuperMart",
"subCaption":"Top 5 stores in last month by revenue",
"numberPrefix":"$",
"theme":"ocean"
},
"data": ' . $jsonEncodedData);
//}';
// Render the chart
print_r($columnChart);
$columnChart->render();
?>
<div id="chart-1"><!-- Fusion Charts will render here--></div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我想在"手动"方法和"获取方法"(在此编辑中的上方)之间发布数组差异.
用fetch:
FusionCharts对象([constructorOptions:FusionCharts:private] => Array(> [type] => column2d [id] => ex1 [width] => 600 [height] => 400 [renderAt] = >> chart-1 [dataFormat ] => json [dataSource] => {"chart":{>"caption":"Harry's SuperMart","subCaption":"上个月按收入排名前5位的商店","numberPrefix":"$","主题":"ocean"},"data":> [{"label":"John","value":"125"},{"label":"Jerry","value":"125"}, {"label":"Jane","value":"125"}])[constructorTemplate:FusionCharts:private] = >> [renderTemplate:FusionCharts:private] =>)
使用手动方法(有效):
FusionCharts对象([constructorOptions:FusionCharts:private] => Array(> [type] => column2d [id] => ex1 [width] => 600 [height] => 400 [renderAt] = >> chart-1 [dataFormat ] => json [dataSource] => {"chart":{>"caption":"Harry's SuperMart","subCaption":"上个月按收入排名前5位的商店","numberPrefix":"$","主题":"ocean"},"data":[{>"label":"Bakersfield Central","value":"880000"},{"label":"Garden Groove> harbour","value":" 730000"},{"label":"Los Angeles Topanga",>"value":"590000"},{"label":"Compton-Rancho Dom","value":"520000"},{>"label ":"Daly City Serramonte","value":"330000"}]})> [constructorTemplate:FusionCharts:private] = >> [renderTemplate:FusionCharts:private] =>)
我手边看到两个不同之处,手册在"数据"和结尾}参数周围插入空格.
有一种自动(并且更容易)的方式:
$stm = $conn->prepare('SELECT Name AS label, Visits AS value FROM mysqltable;');
$stm->execute();
$results = $stm->fetchAll(PDO::FETCH_ASSOC);
$jsonEncodedData = json_encode($results);
echo $jsonEncodedData;
Run Code Online (Sandbox Code Playgroud)
输出(本地测试):
[{"label":"Foo","value":"5"},{"label":"Bar","value":"15"}]
Run Code Online (Sandbox Code Playgroud)
这样你可以像这样使用它:
$columnChart = new FusionCharts('...
...
"data": ' . $jsonEncodedData . '}');
Run Code Online (Sandbox Code Playgroud)
注意到. '}'最后.
你可以这样做:
// This part is just for running purposes
$foo = array (
0 => Array (
'Id' => 6,
'Number' => 1234567890,
'Visits' => 1,
'Name' => 'John'
),
1 => array (
'Id' => 7,
'Number' => 1236549871,
'Visits' => 9,
'Name' => 'Jerry'
),
2 => array (
'Id' => 8,
'Number' => 2147483647,
'Visits' => "3", // Example to output quoted
'Name' => 'Jane'
)
);
$bar = array();
foreach($foo as $k => $v){
$bar[] = array('label' => $foo[$k]['Name'], 'value' => $foo[$k]['Visits']);
}
echo json_encode($bar);
Run Code Online (Sandbox Code Playgroud)
输出:
[{"label":"John","value":1},{"label":"Jerry","value":9},{"label":"Jane","value":"3"}]
Run Code Online (Sandbox Code Playgroud)
与你的(从问题)比较一行:
[{label: "CJ Anderson",value: "25"},{label: "Imran Tahir",value: "25"},...]
Run Code Online (Sandbox Code Playgroud)
注:我认为value是代表Visit和label通过Name.
阅读更多关于json_encode的信息.