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_encodephp変数をエコーし​​ようとしましたが、私ができることは何もありません。

UPDATE 答えは、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配列を JS の有効なオブジェクト リテラルでもある JSON に変換するために使用します。
  • 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 配列を処理するもう 1 つの最良の方法は、json_encode です。

jsonでエンコードされた配列をphpからjavascriptに渡します

json_encode($result_array);

jqueryを使用してjsでjsonデータを処理します。あなたが今していることよりも簡単になります。

于 2013-01-02T13:14:06.743 に答える
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 に答える
0

非表示フィールドにphp値を保存し、そのフィールドにIDを与え、JavaScriptでその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 に答える