我使用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]]];
答案 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)