如何在smarty中读取PHP数组到Java脚本变量

how to read a php array to a java script variable in smarty?

本文关键字:数组 Java 脚本 变量 PHP 读取 smarty      更新时间:2023-09-26

我在php中得到一个数组,并将其发送到smarty .tpl文件。

在smarty中,我想在java脚本变量中获得该数组。

如何做这个。

我觉得应该像

这样简单
<?php
  $_array = array('apple','banana','durian');
  $js_array = '[' . implode(',',$_array) . ']';
?>
<script type="text/javascript">
    var iArray = <?php echo $js_array;?>;
</script>

在php文件中像这样添加

<?
$arr = array(1,2,3,4,5);
$jsarr = implode(',',$arr);
$smarty->assign(arr,$jsarr);
?>

在模板文件中像这样使用

<html>
<head>
<script type="text/javascript">
var array = new Array({$arr});
</script>
</head>
</html>

[]代替new Array比较好。你需要把值放在引号里并转义——以确保不会破坏js。我不喜欢在php中预处理数据然后赋值给smarty。这解决了所有潜在的问题:

<script type="text/javascript">
    var arr=[
    {foreach name=i from=$myarray item=v}
      '{$v|escape:"javascript"}'
      {if !$smarty.foreach.i.last},{/if}
    {/foreach}
    ];
</script>

如果你的数组只包含整数,你可以使用{$v|intval}

由于PHP是在任何JS之前解析的,所以您可以简单地将PHP数组中的值添加到JS函数中:

如果PHP中有这个数组:

$my_array = array("a","b","c","d","e");
然后你可以用下面的代码初始化一个具有相同值的JS数组:
<?php
    //PHP snippet to create a comma-delimited string with each value of $my_array
    //surrounded by quotation marks.  Quotes not needed if values in array are numeric.
    $array_vals = '"' .implode('","', $my_array) .'"';
?>
<script type="text/javascript">
    var my_array = [<?php echo $array_vals;?>];
</script>

最简单的方法是使用json:

<script type="text/javascript">
var arr = <?= json_encode($arr) ?>;
</script>

json_encode()获取php数据并将其转换为json,在我们的情况下,这正是我们需要的。