2012-02-29 202 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