2012-02-29 215 views
1
var stds = []; 
<?php 
    foreach ($this->students as $key => $value){ 
?> 
    var smval = "<?php echo $value?>"; 
    stds.push(smval); 
<?php 
} 
?> 
alert("stds"+stds); 

警报( “性病” +性病); //打印ABC,BCD,EFG等等...如何在JS创建关联数组

上面的代码工作正常,推动学生姓名。 现在我想推学生代码也有价值$键。 如何创建一个关联数组做

+1

这似乎是严重*易受XSS。 – 2012-02-29 20:05:03

+1

为什么不是json_encode? – 2012-02-29 20:09:57

回答

3

做到这一点最干净和最安全的方法是将PHP对象转换成JavaScript对象常量json_encode

var students = <?= json_encode($this->students) ?>; 

// sample usage 
alert (students["Tony"]); // Tony's student code 
alert (students["Geezer"]); // Geezer's student code 
alert (students["Vinnie"]); // etc. 
+1

这个例子有两个不好的地方:你不需要在json_encode返回的地方加上引号(或者调用jQuery.parseJSON)并且你不需要转义引号,json_encode总是返回一些有效的JavaScript代码,所以你可以使用'var students = <?= json_encode($ this-> students)?>;' – 2012-03-06 01:06:46

+0

+1感谢您指出这一点。我将编辑答案。 – 2012-03-06 23:16:12

+0

现在它值得+1;) – 2012-03-07 00:14:51

1
var stds = []; 
<?php 
    foreach ($this->students as $key => $value){ 
?> 
    stds.push({ 'name': '<?php echo $value; ?>', 'code': '<?php echo $key; ?>' }); 
<?php 
    } 
?> 
alert("stds"+stds); 

准确地说:有在JavaScript没有关联数组。你可以使用上面的代码,它给你一个包含你的数据或下面的代码的对象数组,它给你一个类似于你在PHP中使用的对象。

var stds = {}; 
<?php 
    foreach ($this->students as $key => $value){ 
?> 
    stds[ '<?php echo $key; ?>' ] = '<?php echo $value; ?>'; 
<?php 
    } 
?> 
alert("stds"+stds); 
+0

当我尝试打印警报中的stds。它是打印对象,对象 – Someone 2012-02-29 20:08:49

+0

它是第一个代码示例中的一个对象数组。例如,您可以通过'stds [0] .name'访问每个条目。 – Sirko 2012-02-29 20:10:23

+0

错误。 '{“key1”:“val1”,“key2”:“val2”}'是一个关联数组(即哈希)。 – 2012-02-29 20:16:59

0
var stds = <?php echo json_encode($this->students); ?>; 

不知道钥匙是你的数组中

alert(stds[0][ key1 ] +' ' + stds[0][ key2 ]) 
0

我想你想要做更多的

stds[<?php echo $key?>] = '<?php echo $value; ?>'; 

,或者你可以尝试使用对象中做证明这里:

http://jsfiddle.net/u3Muk/

+0

不要这样做,你需要在你的字符串中转义引号和换行符。只需调用'json_encode'为你完成繁重的工作。将PHP数组和值转换为JS比大多数人想象的要简单。 – 2012-03-07 00:17:17