传递给Smarty的PHP文件中的变量范围

时间:2012-12-11 12:35:06

标签: php arrays smarty

我想知道为什么在以下示例中没有使用字符串连接更新数组。

$scripts = array( "jquery.js","bootstrap.min.js",
               "jquery-jvectormap-1.0.min.js",
               "jquery-jvectormap-us-aea-en.js",
               "protoFluid.js");

foreach($scripts as $script)
$script = "/scripts/".$script;                 

$smarty -> assign('scripts',$scripts);

我希望此代码能够将$scripts[0]jquery.js更改为/scripts/jquery.js。但是,Smarty调试控制台显示以下内容。

Smarty_Variable Object (3)
->value = Array (5)
0 => "jquery.js"
1 => "bootstrap.min.js"
2 => "jquery-jvectormap-1.0.min.js"
3 => "jquery-jvectormap-us-aea-en.js"
4 => "protoFluid.js"
->nocache = false
->scope = "Smarty root"

2 个答案:

答案 0 :(得分:2)

Foreach正在处理数组的副本,你必须这样做:

foreach($scripts as &$script)
    $script = "/scripts/".$script; 

答案 1 :(得分:1)

根据您之后是否还需要原始数组,您可以使用array_map()创建修改后的副本:

$smarty->assign('scripts', array_map(function($script) {
    return "/scripts/$script";
}, $scripts));