如何从php数组制作一个javascript数组?

时间:2011-12-07 10:10:26

标签: php javascript jquery arrays smarty

我使用PHP,Smarty配置。

我在PHP中获取一个数组并将其发送到tpl。我希望从该php数组中在tpl中创建一个javascript数组。

PHP ARRAY

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]]]; 

7 个答案:

答案 0 :(得分:17)

你必须循环才能生成那个数组

<script>
   var arr = [];
   <?php foreach ($arr as $item) : ?>
   arr.push(['<?php echo $item['dt']?>', <?php echo $item['number']?>]);
   <?php endforeach; ?>
</script>

这将为您提供一组数组。

但是,我会以另一种方式做到这一点。我只是用json对它进行编码并将其用作对象

<script>
   var data = <?php echo json_encode($arr)?>;
   for (var x in data) {
      //data[x].dt;
      //data[x].number;
   }
</script>

答案 1 :(得分:1)

您可以使用php函数json_encode将数组编码为json,然后将其用作javascript中的对象数组

答案 2 :(得分:1)

我真的不喜欢内联PHP的想法。这些天我们没有内联JavaScript或CSS,因为这是不好的做法,即难以维护。我们感谢关注的分离。如果您需要将数据从应用程序(PHP或其他)传递到客户端的JavaScript变量,那么您可以使用两种很好的机制。通过AJAX将结果作为JSON获取,或者只是在单个可访问位置中在客户端呈现变量。

您的模板引擎应该能够为您在页面上注册数据。你基本上做的是渲染一个脚本,所以你的脚本包含机制应该采用一个可选的参数来注册php变量。如果你没有使用模板引擎而只需要注入变量,我想可以接受一些事情。

<script type="text/javascript">
    var phpdata = <?php echo json_encode($phpdata)?>
</script>

请注意,这是宣布全球性的。我们被鼓励不惜一切代价避免使用全局变量,但我认为这是合理选择的有效用例,例如,如果您在全局范围内将自己的对象注册为合理的命名空间,则请参考namespace.phpdata。或者,您只需将JavaScript包装在一个立即函数调用中,并在本地范围内声明该变量。

function () {
    var phpdata = <?php echo json_encode($phpdata)?>

    ...
}();

但就像我说的那样,在我看来,我觉得最好让你的模板引擎来处理它,所以你传递每个javascript include所需的PHP数据,并从这些数据中生成一个php数据对象并包括在内在你的页面。

答案 3 :(得分:0)

首先:数组不等同。

$array = array_map('array_values', $array);

这个等同于你想要看作JS-array

的那个
$js = json_encode($array);

如果要保留关联(内部)数组的键,只需省略第一个表达式。

答案 4 :(得分:0)

如果你想在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似乎更清晰,更简单。

答案 5 :(得分:-1)

首先创建一个新的javascript数组:

var array = new array();

遍历你的tpl中的php数组并创建javascript数组

foreach($phparray as $i => $ary) {
   echo "array[".$i."] = new array(".$ary['dt'].",".$ary['number'].");
}

答案 6 :(得分:-3)

有很多方法可以做到这一点。我相信互联网上有很多解决方案。

基本上你只需要使用for循环来实现它

我已经为你搜索过了。 There