2

PHP バージョン 5.3.14

配列の宣言とプログラムでの使用方法: (一般的なコード スキームに変更)

次のようなPHP配列を作成しています:

$totalData;

getnumSends($SomeObject){

   $dataArray[0] = $someObject->Date //Date is a String
   foreach($anotherObject as $Object2){
    switch($anotherObject->String){
    case "XX":
        $dataArray[1]+=1;
         break;
    case "YY":
        $dataArray[2]+=1;
        break;
    }
  }
}

   //Method just puts an int value at certain places in the array
   //extra code for putting ints in the array

   return $dataArray;
}
$someIndex = 0;
foreach($someObject as $Object1){ //that is very abstract
   $totalData[$someIndex] = $Object1->getNumSend($someObject);  
   $someIndex+=1;

} 

それは理にかなっていますか?

print_r($totalData);が呼び出されたときに次のような PHP 配列があるとします。

Array
(
    [0] => Array
        (
            [0] => 2012-04-25
            [1] => 2
            [2] => 1
            [3] => 2
            [4] => 1
            [5] => 1
            [6] => 1
        )

    [1] => Array
        (
            [0] => 2012-04-29
            [1] => 4
            [2] => 4
            [3] => 2
            [4] => 1
            [5] => 1
        )
)

今、データのプロットに使用したいJavaScriptコードがいくつかあります。スクリプトは次の形式のデータを必要とします。

var matrix = [[2012-04-25, 2, 1, 2, 1, 1, 1], [2012-4-29, 4, 4, 2, 1, 1]];

PHP配列をJavaScript配列に取得するには、複数の方法があるようですが、私が試したすべての方法ですべての角括弧を取得することはできません. 私が得る最も近いものはこれです:

<script>

var matrix = <?php echo json_encode($totalData); ?>;

</script>

「ページのソースを表示」からの出力:

var matrix = [[{"0":"2012-04-25","1":2,"2":1,"3":2,"4":1,"5":1,"6":1}],[{"0":"2012-04-29","1":4,"2":4,"3":2,"4":1,"5":1}]];

PHP の 2 次元配列から Javascript の 2 次元配列に変換する方法はありますか? 各スポットを手作業で埋めるメソッドを書くのは避けたいと思っていましたか? JSONを間違って使用しているだけだと思っていました。どんな助けでも素晴らしいでしょう。

4

2 に答える 2

0

反対側からこれを攻撃する:

アレイを手動で再構築する必要はないとおっしゃっていましたが、最後の手段としてそれを行うためのアプローチを次に示します。

var matrix = [{"0":"2012-04-25","1":2,"2":1,"3":2,"4":1,"5":1,"6":1},{"0":"2012-04-29","1":4,"2":4,"3":2,"4":1,"5":1}];

var retArray = new Array();
var tmpArr1 = new Array();
var tmpArr2 = new Array();

for(var i = 0; i < retArray.length; ++i) {
    for(property in matrix[i]) {
        (i === 0) ? tmpArr1.push(matrix[i][property]) : tmpArr2.push(matrix[i][property]);
    }
}

retArray.push(tmpArr1);
retArray.push(tmpArr2);

クリーンアップ/より抽象化できる可能性がありますが、それが一般的なアプローチです。

于 2012-09-25T18:45:44.570 に答える
0

1 つの可能性はありますが、あまり「クリーン」ではないアプローチは、配列を便利に内破することです。

function getJSArray($data){
    $jsMatrix = '[';
    foreach($data as $key => $val){
        $jsMatrix .= '[' . implode(', ', $val) . ']';
        if($key != count($data)-1)
            $jsMatrix .= ', ';
    }
    $jsMatrix .= ']';
    return $jsMatrix;
}

その後

<script>
    var matrix = <?php echo getJSArray($totalData); ?>;
</script>

のような配列で

$data = array(array('2012-04-25', 2, 1, 2, 1, 1, 1),
              array('2012-04-29', 4, 4, 2, 1, 1)
             );

出力が得られます

<script>
    var matrix = [[2012-04-25, 2, 1, 2, 1, 1, 1], [2012-04-29, 4, 4, 2, 1, 1]]
</script>
于 2012-09-26T07:28:09.443 に答える