繁体   English   中英

从PHP数组到Javascript数组花括号与方括号

[英]going from PHP arrays to Javascript arrays curly braces vs square brackets

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;

} 

那有意义吗?

可以说我有一个PHP数组,当print_r($totalData);时看起来像这样 叫做:

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。 任何帮助都会很棒。

从另一端进行攻击:

我知道您说过您不需要手动重建数组,但是作为最后的手段,这是一种方法:

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);

可以将其清除/使其更加抽象,但这是常规方法。

一种可能但不是很“干净”的方法是方便地使阵列内陷

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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM