【问题标题】:How to Create Associative array in JS如何在 JS 中创建关联数组
【发布时间】:2012-03-19 07:57:10
【问题描述】:
var stds = [];
<?php
  foreach ($this->students as $key => $value){
?>
    var smval = "<?php echo $value?>";
    stds.push( smval );
<?php
}
?>
alert("stds"+stds);

alert("stds"+stds);//打印 abc,bcd,efg 等等...

上面的代码可以很好地推送学生姓名。 现在我也想推送价值 $key 中的学生代码。 我怎样才能创建一个关联数组来做到这一点

【问题讨论】:

  • 这似乎非常容易受到 XSS 攻击。

标签: php javascript jquery jquery-selectors


【解决方案1】:

最干净和最安全的方法是使用json_encode 将 PHP 对象转换为 JavaScript 对象字面量:

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.

【讨论】:

  • 这个例子有两个不好的地方:你不需要在 json_encode 返回的内容周围加上引号(或调用 jQuery.parseJSON),你不需要转义引号,json_encode 总是返回一些有效的 JavaScript,因此您可以使用 var students = &lt;?= json_encode($this-&gt;students) ?&gt;;
【解决方案2】:
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);

【讨论】:

  • 当我尝试打印警报中的标准时。它正在打印对象,对象
  • 它是第一个代码示例中的对象数组。例如,您可以通过stds[0].name 访问每个条目。
  • 不正确。 {"key1": "val1", "key2": "val2"} 是一个关联数组(即哈希)。
  • 那将是一个对象。它确实没有具有任何数组原型的函数和属性,例如lengthmap
  • 谷歌“JavaScript 关联数组”。那里有很多关于这方面的信息。您将数组数据类型与一般对象混淆了。 JavaScript 中的所有对象也是关联数组。偶数函数。
【解决方案3】:
var stds = <?php echo json_encode( $this->students); ?>;

不确定数组中有哪些键

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

【讨论】:

    【解决方案4】:

    我认为你正在尝试做更多的事情

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

    或者您可以尝试在此处演示的对象中执行此操作:

    http://jsfiddle.net/u3Muk/

    【讨论】:

    • 不要这样做,你需要在你的字符串中转义引号和换行符。只需致电json_encode 为您完成繁重的工作。将 PHP 数组和值转换为 JS 比大多数人想象的要简单。
    猜你喜欢
    • 2017-08-02
    • 2017-04-05
    • 2019-09-30
    • 2021-01-22
    • 2016-05-11
    • 2011-03-17
    • 2014-12-17
    • 1970-01-01
    • 2018-11-13
    相关资源
    最近更新 更多