为何PHP json_encode处理后JavaScript数组被扁平化至索引0?
为什么PHP数组转JavaScript数组后被扁平化到索引0?
咱们先理清楚问题出在哪:你本来想把PHP的日期数组转换成JavaScript数组,但结果却变成了只有一个元素的数组,这个元素还是整个JSON字符串对吧?
问题根源
你看这段代码:
<script type="text/javascript"> var sessions = new Array('<?php echo json_encode($savedRequestDates); ?>'); console.log(sessions[0]); </script>
这里的json_encode($savedRequestDates)已经帮你生成了合法的JavaScript数组格式的字符串:
["2018-03-29 10:56:31","2018-03-29 10:58:09","2018-04-12 11:28:41","2018-04-12 13:07:25","2018-05-09 13:08:07"]
但你把这个字符串用单引号包起来,再传给new Array(),相当于告诉JS:"给我创建一个数组,里面只有这一个长字符串元素"——而不是让JS把这个字符串解析成数组。这就是为什么sessions只有索引0的元素。
解决方法
最简单直接的方式,就是直接把JSON结果赋值给变量,不需要new Array()或者额外的引号:
<script type="text/javascript"> var sessions = <?php echo json_encode($savedRequestDates); ?>; console.log(sessions); // 现在你会得到包含5个日期元素的数组了 </script>
因为json_encode输出的JSON格式本身就是JavaScript可以直接识别的数组语法,完全没必要再用new Array()去包裹它。
如果非要用Array构造或者JSON.parse(其实没必要,多此一举),可以这样写:
<script type="text/javascript"> // 用扩展运算符把JSON数组的元素展开到新数组 var sessions = new Array(...<?php echo json_encode($savedRequestDates); ?>); // 或者用JSON.parse解析字符串 var sessions = JSON.parse('<?php echo json_encode($savedRequestDates); ?>'); </script>
但第一种直接赋值的方法是最简洁高效的,推荐用这个。
内容的提问来源于stack exchange,提问作者Sam Sverko
相关产品推荐
相关产品推荐

