您将如何 a) 在 PHP 中修复 Smarty 数组并 b) 将结果粘贴回 Smarty 数组变量中?
您是否曾经解决过一个问题,并且您认为您已经非常接近解决它,但目标却越来越远?我花了半天时间,查找文档,搜索示例……但我一定遗漏了一些非常基本的东西。
前提:我有一个包含重复条目的 Smarty 数组(现在我无法更改它的创建方式,因为 Smarty 代码是在模板中编码的)。这会导致问题,因为现在我在购物车中获得了同一产品的多个条目。现在,老实说,我无法改变组合方式的逻辑。
这是我得到的:
Smarty:
{$products}
在我的场景中,{$products} 包含四个条目,如下所示:
array(1) { [0]=> array(12) { ["pid"]=> string(2) "13" ["domain"]=> NULL
["billingcycle"]=> string(4) "free" ["configoptions"]=> string(0) ""
["customfields"]=> array(0) { } ["addons"]=> array(0) { } ["server"]=> string(0) ""
["productinfo"]=> array(9) { ["pid"]=> string(2) "13" ["gid"]=> string(1) "2"
["type"]=> string(5) "other" ["groupname"]=> string(13) "Beta Products" ["name"]=>
string(44) "BetterStuff "Free Until 2014" Beta" ["description"]=> string(21)
"BetterStuff installer" ["freedomain"]=> string(0) "" ["freedomainpaymentterms"]=>
array(1) { [0]=> string(0) "" } ["freedomaintlds"]=> array(1) {[0]=> string(0) ""}}
["allowqty"]=> string(1) "0" ["qty"]=> int(1) ["pricing"]=> array(4) { ["baseprice"]=>
string(9) "$0.00 USD" ["setup"]=> string(9) "$0.00 USD" ["recurring"]=> array(0){}
["totaltoday"]=> string(9) "$0.00 USD" } ["pricingtext"]=> string(5) "FREE!" } }
在 PHP 中,我可以轻松地使用 array-unique 来删除该数组中的 3 个精确副本,而只留下一个(如我刚刚在上面展示的那个)。
{php}
$var = $this->get_template_vars('products');
$var = array_unique($var);
$smarty = new Smarty();
$smarty->assign('newproducts', $var = array_unique($var));
var_dump($var);
{/php}
这在 PHP 中完美运行,并且 var_dump($var) 包含一个数组项(就像我在上面展示的一样)。在 PHP 中,当我用 is_array 检查 $var 时,结果为真。
然而,回到 Smarty,{$newproducts} 为 NULL。
当我尝试重新分配原始 Smarty 数组 {$products} 时,我收到一条关于不允许将字符串值添加到数组的错误消息。
当我尝试打印 {$newproducts|@count} 时,我得到 0。这对我来说有点混乱,因为我相信智能数组从 1 开始,而 PHP 数组是从零开始的。
因此,尽管 PHP 将我分配的变量视为数组的新变量的值,但它不会作为数组进入 Smarty。
我在这里做错了什么?我是否需要以某种方式分解或拆分我的 PHP 数组,以便将其转换为 Smarty 变量?
以及如何将 Smarty 中的原始 {$products} 数组“重置”为新的唯一数组值?
任何人?