如何从php数组生成java脚本数组?
Iam使用PHP,Smarty配置 我在PHP中得到一个数组并将其发送给tpl。我想从该PHP数组在tpl中创建一个javascript数组 PHP数组如何从php数组生成java脚本数组?,php,javascript,jquery,arrays,smarty,Php,Javascript,Jquery,Arrays,Smarty,Iam使用PHP,Smarty配置 我在PHP中得到一个数组并将其发送给tpl。我想从该PHP数组在tpl中创建一个javascript数组 PHP数组 Array ( [0] => Array ( [dt] => 2011-12-02 [number] => 3 ) [1] => Array ( [dt] => 2011-12-
Array
(
[0] => Array
(
[dt] => 2011-12-02
[number] => 3
)
[1] => Array
(
[dt] => 2011-12-05
[number] => 3
)
[2] => Array
(
[dt] => 2011-12-07
[number] => 2
)
)
我想把它作为tpl中的java脚本数组
s1 = [[[2011-12-02, 3],[2011-12-05,3],[2011-12-07,2]]];
您必须循环通过它来生成该数组
<script>
var arr = [];
<?php foreach ($arr as $item) : ?>
arr.push(['<?php echo $item['dt']?>', <?php echo $item['number']?>]);
<?php endforeach; ?>
</script>
var-arr=[];
arr.push(['',]);
这将为您提供一个数组
不过,我会用另一种方式。我只是用json对其进行编码,并将其用作对象
<script>
var data = <?php echo json_encode($arr)?>;
for (var x in data) {
//data[x].dt;
//data[x].number;
}
</script>
var数据=;
用于(数据中的var x){
//数据[x].dt;
//数据[x]。编号;
}
您可以使用php函数json\u encode将数组编码为json,然后在javascript中将其用作类似数组的对象。首先,数组是不等价的
$array = array_map('array_values', $array);
这一个相当于您希望看到的JS数组
$js = json_encode($array);
如果要保留关联(内部)数组的键,只需省略第一个表达式。如果要在smarty模板中执行此操作,请在PHP数组上循环并输出javascript数组元素,在每个元素(最后一个除外)后添加逗号
s1 = [
{foreach from=$myArray item=item name=loop}
[{$item['dt']}, {$item['number']}] {if $smarty.foreach.loop.last == false},{/if}
{/foreach}
]
正如其他人所说的,在PHP中将数组编码为JSON似乎更干净、更简单。首先创建一个新的javascript数组:
var array = new array();
循环遍历tpl中的php数组并创建javascript数组foreach($phparray as $i => $ary) {
echo "array[".$i."] = new array(".$ary['dt'].",".$ary['number'].");
}
有很多方法可以做到这一点。我相信在互联网上有很多解决方案 基本上你只需要使用for循环来实现它 我已经在谷歌上搜索过了。
我真的不喜欢到处都是内联PHP的想法。我们现在不内联JavaScript或CSS,因为这是一种不好的做法,即难以维护。我们赞赏将关切分开。如果需要将数据从应用程序(PHP或其他)传递到客户端的JavaScript变量,那么可以使用两种好的机制。要么通过AJAX以JSON的形式获取结果,要么在一个可访问的位置在客户端呈现变量 您的模板引擎应该能够真正为您注册页面上的数据。实际上,您所做的是呈现一个脚本,所以您的脚本包含机制应该采用一个可选参数来注册php变量。如果您不使用模板引擎,只需要注入变量,我想可以接受按照模板引擎的思路来做一些事情
<script type="text/javascript">
var phpdata = <?php echo json_encode($phpdata)?>
</script>
var phpdata=
请注意,这是一个全局声明。我们被鼓励不惜一切代价避免使用globals,但我认为如果明智地选择,这是一个有效的用例,例如,如果您在全局范围中将自己的对象注册为一个合理的名称空间,那么请参考namespace.phpdata。或者,您只需将JavaScript包装在即时函数调用中,并在局部范围内声明变量
function () {
var phpdata = <?php echo json_encode($phpdata)?>
...
}();
函数(){
var phpdata=
...
}();
但正如我所说的,我认为最好让模板引擎来处理它,这样就可以传递每个javascript包含所需的PHP数据,并从这些数据生成一个PHP数据对象,并包含在页面中。这两个数组不是完全等价的sorry,有什么区别。。我找不到它。你可以用PHP通过
输入[type=hidden]
将它保存为字符串,然后用JSHeh读取并解析它。我在阅读了上半部分后打算进行下一次投票,但后来看到你确实建议json\u encode
。但是您确实应该使用var x
,而不仅仅是x
。全局变量是坏的。尽管在脚本标记中并不重要,但代码最终可能在函数中的可能性很高。你完全正确,没有看到var
。添加,谢谢。第一个不会将2011-12-02
视为1997
(因为-
是算术运算符)?@KingCrunch是的,你是对的。应该被引用,谢谢。谢谢你的解决方案解决了我的问题。如何在tpl中从变量$js到java脚本获取json编码的值?这件事很紧急,请帮帮我。和往常一样:var x=代码>