1

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

$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"
4

2 回答 2

2

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

foreach($scripts as &$script)
    $script = "/scripts/".$script; 
于 2012-12-11T12:37:45.910 回答
1

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

$smarty->assign('scripts', array_map(function($script) {
    return "/scripts/$script";
}, $scripts));
于 2012-12-11T12:42:46.843 回答