2

我需要将我的 MySQL php 数据数组转换为利用 highcharts 库的 JavaScript。我坚持在 JavaScript 中回显一些包含图表数据的 php。到目前为止,我可以将 php 回显为我已经测试并复制到 JavaScript 中的格式,它工作正常,但只需要一点帮助就可以用 php 编写 JavaScript 了。

php 代码:(我已经包含了 br/ 标签以便于查看)

for($i=0; $i<4; $i++){
    echo '{type: "column",<br/>';
    echo 'name: '.($i+1).',<br/>';
    echo 'data: [';
    for($j=0; $j<count($data); $j++){
        echo $data[$j][$i+1].',';
    }
    echo ']},<br/>';
}
echo '{
    type: "spline",
    name: "Strike Rate",<br/>';
echo 'data: [';
for($i=0; $i<count($data); $i++){
    echo $data[$i][7].',';     
}
echo '],<br/>';
echo 'marker: {
    lineWidth: 2,
    lineColor: Highcharts.getOptions().colors[3],
    fillColor: "white"
}';

php的输出:

{   type: "column", 
    name: 1,
    data: [4,1,3,2,4,3,5,1,3,1,1,2,2,0,0,0,0,0,]},
{   type: "column",
    name: 2,
    data: [5,3,3,4,2,3,3,2,0,3,1,2,1,0,0,0,0,0,]},
{   type: "column",
    name: 3,
    data: [2,1,5,5,2,3,1,2,4,5,1,0,1,0,0,0,0,0,]},
{   type: "column",
    name: 4,
    data: [6,4,4,1,3,3,5,2,3,0,0,1,0,0,0,0,0,0,]},
{   type: "spline",
    name: "Strike Rate",
    data:     [13.33,3.45,9.38,6.67,14.81,10.00,20.00,3.85,11.54,4.76,7.14,15.38,28.57,0.00,0.00,0.00,0.00,0.00,],
    marker: {
        lineWidth: 2,
        lineColor: Highcharts.getOptions().colors[3],
        fillColor: "white"
    }

我试过json_encode并且只回显 php 变量,但我无能为力。

更新 答案比仅仅将 PHP 输出回显到 Javascript 更简单(我认为这是可能的)......无论如何,非常感谢所有做出贡献的人,如果没有这样一个伟大的社区,我会发现学习新事物真的很困难,找到很好的建议和提示来纠正问题。

通过正确的建议,我能够创建 Javascript 变量并相应地使用它们。

<script>
...

var myArray = <?php echo json_encode($data[1]['data']); ?>; 
....
{
type: 'column',
name: '1',
data: myArray
},
....
</script>

也祝新年快乐!干杯史蒂夫

4

7 回答 7

5

您正在混合 PHP、JavaScript 和 HTML,结果一团糟。下面是一个如何使用 PHP 创建 JavaScript 对象字面量的示例:

<?php

$values = array();

for ($i=0; $i < 4; $i++) {
    $value = array(
        'type' => 'column',
        'name' => $i + 1,
        'data' => array()
    );
    for ($j=0; $j < count($data); $j++){
         $value['data'][] = $data[$j][$i+1];
    }
    $values[] = $value;
}
?>

<!-- HTML stuff here -->

<script>
    var data = <?php echo json_encode($values); ?>;
    // JavaScript that processes `data` here
</script>

<!-- More HTML here -->

这个想法是:

  • 首先使用数组的数组构建数据结构。
  • 用于json_encode将数组转换为 JSON,这也是 JS 中的有效对象字面量。
  • 将 PHP 嵌入 HTML 或 JS,不要(手动)生成 HTML 或 JS。

我不知道数据必须采用哪种格式,但我把它留给你找出来。迭代和提取数据也可能会得到改进,但由于我们不知道你有什么数据,现在这已经足够了。

于 2013-01-02T13:12:31.623 回答
3

像这样输出数据的问题是错误的原因,很难匹配所有的大括号。您似乎缺少围绕整个事物的最后一个大括号和数组大括号。

json_encode相反,您可以使用不易出错的函数创建数据结构并将其序列化为 JSON 。为您的案例执行此操作的代码如下:

// Set up the columns
$arr = array();
for($i = 0; $i < 4; $i ++) {
  $column = array(
    "name" => $i + 1,
    "data" => array()
  );
  for($j = 0; $j < count($data); $j ++) {
    $column["data"][] = $data[$j][$i + 1];
  }
  $arr[] = $column;
}

// Set up the spline
$spline = array(
  "type" => "spline",
  "name" => "Strike Rate",
  "data" => array();
);
for($i = 0; $i < count($data); $i ++) {
  $spline["data"][] = $data[$i][7];
}
$arr[] = $spline;

// Output json
echo json_encode($arr);
于 2013-01-02T13:21:07.340 回答
1

我想你的问题是这种线:

data: [6,4,4,1,3,3,5,2,3,0,0,1,0,0,0,0,0,0,]},

删除数组中的尾随 ,

data: [6,4,4,1,3,3,5,2,3,0,0,1,0,0,0,0,0,0]},

希望这会有所帮助。

于 2013-01-02T13:06:32.060 回答
1

在 javascript 中处理 PHP 数组的另一种最佳方法是json_encode

将 json 编码数组从您的 php 传递给 javascript,例如

json_encode($result_array);

并使用jquery处理js中的json数据。这将比你现在做的容易。

于 2013-01-02T13:14:06.743 回答
0

请将 php 值存储在隐藏字段中,并在 javascript 中使用该 ID 为该字段提供一些 ID 并访问值

于 2013-01-02T13:05:33.073 回答
0

您在该数据列的末尾添加了一个额外的逗号。那会破坏JSON。使用内爆函数。

for($i=0; $i<4; $i++){
  echo '{type: "column",<br/>';
  echo 'name: '.($i+1).',<br/>';
  echo 'data: ['
  echo implode(',', $data);
  echo ']},<br/>';
}
于 2013-01-02T13:09:52.707 回答
0
$data=array();
for($i=0; $i<4; $i++){
$data['type']="column";
for($j=0; $j<count($data); $j++){
 $data['data'][] = $data[$j][$i+1];
}
}
json_encode($data);
于 2013-01-02T13:26:06.273 回答