5

jQueryガントチャートのjsonで動的にデータを生成しようとしています。私はPHPを知っていますが、JavaScriptは完全に環境に優しいです。私は、jsonにデータを動的に追加する方法について数十のソリューションを読み、数十の組み合わせを試しましたが、何もしませんでした。json形式は次のとおりです。

var data = [{
    name: "Sprint 0",
    desc: "Analysis",
    values: [{
        from: "/Date(1320192000000)/",
        to: "/Date(1322401600000)/",
        label: "Requirement Gathering", 
        customClass: "ganttRed"
        }]
    },{
    name: " ",
    desc: "Scoping",
    values: [{
        from: "/Date(1322611200000)/",
        to: "/Date(1323302400000)/",
        label: "Scoping", 
        customClass: "ganttRed"
        }]
    }, <!-- Somoe more data-->

      }];

これで、phpdbの結果にすべてのデータが含まれます。ここに行きます:

$rows=$db->fetchAllRows($result);
$rowsNum=count($rows);

そして、これは私がそれからjsonを作成したかった方法です:

var data='';
<?php foreach ($rows as $row){ ?>
data['name']="<?php echo $row['name'];?>";
data['desc']="<?php echo $row['desc'];?>";
data['values'] = {"from" : "/Date(<?php echo $row['from'];?>)/", "to" : "/Date(<?php echo $row['to'];?>)/", "label" : "<?php echo $row['label'];?>", "customClass" : "ganttOrange"};
}

ただし、これは機能しません。ループなしで、チェックのためにphp変数をプレーンテキストに置き換えてみましたが、どちらも機能しませんでした。アイテムを追加せずにチャートを表示します。値のリストに追加して新しいアイテムを追加すると、機能します。したがって、ガント自体またはパスに問題はありません。上記のすべてに基づいて、問題はjsonにプレーンデータを追加することにあると思います。誰かが私がそれを修正するのを手伝ってくれますか?

4

4 に答える 4

4

まず、オブジェクトを作成する代わりに、文字列にプロパティを追加します。あなたが本当にそれをこのようにしたいのなら:

 var data = [], row;
 <?php foreach ($rows as $row) : ?>
     row = {};
     row.name ="<?php echo $row['name'];?>";
     row.desc ="<?php echo $row['desc'];?>";
     row.values = {"from" : "/Date(<?php echo $row['from'];?>)/", "to" : "/Date(<?php echo $row['to'];?>)/", "label" : "<?php echo $row['label'];?>", "customClass" : "ganttOrange"};
     data.push(row);
 <?php endforeach; ?>

とにかくそれは安全ではありません(そして結果は通常のJSコードであり、適切なJSONオブジェクトではありません-しかし、変数に割り当てるので、厳密なJSON形式である必要はないと思います)

より良いアプローチは、PHPでデータ構造を構築し、json_encode関数を使用してJavaScriptのJSONデータを生成することです。

 <?php
 $data = array();
 foreach ($rows as $row) {
      $data[] = array(
          'name'   => $row['name'],
          'desc'   => $row['desc'],
          'values' => array(array(
              'from'        => '/Date('.$row['from'].'>)/', 
              'to'          => '/Date('.$row['to'].')/',
              'label'       => $row['label'], 
              'customClass' => 'ganttOrange',
          ))
      );
 }
 ?>
 var data = <?php echo json_encode($data); ?>;
于 2012-11-26T23:01:26.690 に答える
1

素早い回答

前述のように、この問題はPHPのjson_encode関数を使用して簡単に解決できます。

これを簡単に行う方法を理解する秘訣は、操作しようとしている複合データ構造を理解することです。

概要

あなたが扱っているのは、「複合データ構造」と呼ばれる一般的なプログラミングの概念です。これを理解する秘訣は、管理しようとしているPHPとJavaScriptが、まったく同じものの2つの異なる表現にすぎないことを理解することです。

この概念が浸透すると、ユーザーのMusadev-null-dwellerがすでに説明したことと簡単に関連付けることができます。

この問題を解決する簡単な方法は、PHPで複合データ構造を構築し、PHPのjson_encodeおよびjson_decodeの組み込みネイティブメソッドを使用してそれをJSON(別名JavaScript)に変換することです。

すべてのステートメントを実行する代わりに、各$ rowを複合データ構造として扱い、PHPjson関数を使用する必要があります。

次の例は、有利なスタートを切る必要があります。それを、処理しようとしているデータと比較し、それに応じて変更するだけです。

例001

  // This is a PHP composite data structure [ a nested array ]
  // represented in PHP. When you run this code you will get the
  // output of Result 001
  $user_profile = Array(
    main => Array(
      first_name  => "_blank_",
      last_name   => "_blank_",
      sex         => "_blank_",
      age         => "_blank_",    
    ),
    guardian => Array(
      first_name => "",
      last_name => "",
    ),
    children => Array(
      0 => Array(
        first_name => "Sally",
        last_name => "Shaw",
      ),
      1 => Array(
        first_name => "Scott",
        last_name => "Shaw",
      ),
    ),
  );

  // This is some sample PHP code you can use to modify
  // the composite data structure (modify the "_blank_" values)
  //
  $user_profile["main"]["first_name"] = "Archibald";
  $user_profile["main"]["last_name"]  = "Shaw";
  $user_profile["main"]["age"]        = "33";
  $user_profile["main"]["sex"]        = "male";

  // This is some sample PHP code you can use to modify
  // the composite data structure (add a new child)
  // 
  $user_profile["children"][2] = Array();
  $user_profile["children"][2]["first_name"]  = "Carrie";
  $user_profile["children"][2]["last_name"]   = "Shaw";

  // This is the PHP code you can use to transform from PHP to JSON 
  $result = json_encode( $user_profile );
  print_r( $result );

結果001(読みやすいようにフォーマットされています)

{
   "main":{
      "first_name":"Archibald",
      "last_name":"Shaw",
      "sex":"male",
      "age":"33"
   },
   "guardian":{
      "first_name":"",
      "last_name":""
   },
   "children":[
      {
         "first_name":"Sally",
         "last_name":"Shaw"
      },
      {
         "first_name":"Scott",
         "last_name":"Shaw"
      },
      {
         "first_name":"Carrie",
         "last_name":"Shaw"
      }
   ]
}

結論

上記の例を使用して、最初に操作しようとしているPHP変数のprint_rを実行し、全体的な構造を理解する必要があります。これを知ったら、組み込みのPHPjson_encode関数を使用してJSONに変換するのは簡単なステップです。

参考文献

于 2012-11-26T23:32:09.460 に答える
0
var data=[];

<?php 
foreach ($rows as $row)
{ 
    $obj = array(
        'name' => $row['name'],
        'desc' => $row['desc'],
        'values' => array(
            array(
                "from" => "/Date({$row['from']})/",
                "to" => "/Date({$row['to']})/",
                "label" => $row['label'],
                "customClass" => "ganttOrange",
            )
        )
    );
    $objJson = json_encode($obj);
    echo "data.push({$objJson});\n";
}
?>
于 2012-11-26T23:00:40.513 に答える
0

phpでデータ構造を作成し、 json_encodeでエコーアウトする必要があります。

<?php 
$data = array();
foreach ($rows as $row){ 
    $item = array();
    $item['name']=$row['name'];
    $item['desc']=$row['desc'];
    $item['values']= array("from" => "/Date{$row['from']})/", 
                           "to" => "/Date({$row['to']})/", 
                           "label" => $row['label'], 
                           "customClass" => "ganttOrange");
    $data[] = $item;
}
echo "\nvar data = ".json_encode($data).";\n";
于 2012-11-26T23:00:47.133 に答える