如何从php数组生成java脚本数组?

如何从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-

Iam使用PHP,Smarty配置

我在PHP中得到一个数组并将其发送给tpl。我想从该PHP数组在tpl中创建一个javascript数组

PHP数组

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=