2011-12-02 72 views
0

可能重复:
assigning multidimensional php array to javascript array分配一个PHP多维数组的Java脚本阵列

我有一个二维数组PHP如下所述,我试图把它分配给java脚本数组。

<?php 
$taskArray = array( 
      array(taskName => "t1", 
         startDate => 11/01/2011, 
         duration => 10 ), 
       array(taskName => "t2", 
         startDate => 11/02/2011, 
         duration => 5 ), 
       array(taskName => "t3", 
         startDate => 11/05/2011, 
         duration => 8 ), 
      ); 
?> 



<script type="text/javascript"> 
function getArray(){ 

var a=new Array; 

<?php 

    $x = count($taskArray); 

    for($i=1;$i<=count($taskArray); $i++){ 
    echo "a[$i][taskName]='".$taskArray[$i]["taskName"]."';\n"; 
    echo "a[$i][startDate]='".$taskArray[$i]["startDate"]."';\n"; 
    echo "a[$i][duration]='".$taskArray[$i]["duration"]."';\n"; 
    } 

    ?>    
} 
</script> 

在上述回波行中使用键字符串时会出现问题。什么是正确的连接? 注意:echo "a[$i]='".$taskArray[$i]."';\n";作品

+6

如果您有机会获得JSON的扩展名(通常是启用),那么你可以使用json_encode与阵列,它应该为你提供一个JavaScript可以使用的数组。 – jValdron

+0

你在正确的路径上,但在你的echo语句中的引号是离开的。见下面的答案。 – vdbuilder

+0

你的钥匙不是字符串。此外,JS中的数组没有键,你正在创建一个对象数组。如上所述,只需使用JSON_ENCODE($ taskArray)并将其分配给某个值即可。 – Incognito

回答

1

jValdron的评论将是最简单的方法,但如果你真的想自己做,我认为你唯一缺少的是你生成的JavaScript中的一些引号。 a[$i][taskName]会将taskName作为javascript中的变量处理。我相信你想要

echo "a[$i]['taskName']=".$taskArray[$i]["taskName"]."';\n"; 
// etc... 

另外,还有两件事我注意到了。首先,你从索引1开始,这实际上是你数组中的第二件事。这可能是故意的,但大多数时候我看到这是偶然发生的。其次,为什么你要将计数存储在$x中,然后每次在循环中重新计算它?

所以,如果我猜的话,我会说的写入循环将

for($i=0; $i<$x; $i++) { 
    //etc... 
} 

最好的方式,我不是要求它的一个巨大的风扇$x(我宁愿一个更有意义的名字,如$len$arrLen或其他),但在这种情况下这不是一个大问题。

编辑:我只注意到你的函数没有返回语句。所以在所有的功能应该是这样的:

<?php 
$taskArray = array( 
      array(taskName => "t1", 
         startDate => 11/01/2011, 
         duration => 10 ), 
       array(taskName => "t2", 
         startDate => 11/02/2011, 
         duration => 5 ), 
       array(taskName => "t3", 
         startDate => 11/05/2011, 
         duration => 8 ), 
      ); 
?> 



<script type="text/javascript"> 
function getArray(){ 

var a=new Array; 

<?php 

    $len = count($taskArray); 

    for($i=1;$i<=$len; $i++){ 
    echo "a[$i]['taskName']='".$taskArray[$i]["taskName"]."';\n"; 
    echo "a[$i]['startDate']='".$taskArray[$i]["startDate"]."';\n"; 
    echo "a[$i]['duration']='".$taskArray[$i]["duration"]."';\n"; 
    } 

    ?> 
    return a;   
} 
</script> 
+0

@vdbuilder我看到的唯一区别是你添加了括号。没有它们,它会正常工作,那么为什么你的答案更好? –

+0

@jearemy我有意从索引1开始,不需要重新计算数组大小。但仍然回声不起作用与上面建议的线 – sheng

+0

@sheng我只是意识到,没有'返回'语句在您的JavaScript代码。我编辑了我的回复以包含该内容。它现在工作吗? –

1

你的代码改成这样:

<?php 
    $taskArray = array( 
     array(taskName => "t1", 
       startDate => 11/01/2011, 
       duration => 10 ), 
     array(taskName => "t2", 
       startDate => 11/02/2011, 
       duration => 5 ), 
     array(taskName => "t3", 
       startDate => 11/05/2011, 
       duration => 8 ), 
     ); 
?> 


<script type="text/javascript"> 
function getArray(){ 

var a=new Array; 

<?php 
    $x = count($taskArray); 

    for($i=1;$i<count($taskArray); $i++){ 
     echo ("a[$i]['taskName']='".$taskArray[$i]['taskName']."';\n"); 
     echo ("a[$i]['startDate']='".$taskArray[$i]['startDate']."';\n"); 
     echo ("a[$i]['duration']='".$taskArray[$i]['duration']."';\n"); 
    } 
?>    
    return a; 
} 
</script> 
+0

我试过这个,但仍然没有工作 – sheng