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 に答える