a) PHP で Smarty 配列を修正し、b) その結果を Smarty 配列変数に戻すにはどうすればよいでしょうか?
問題に取り組み、解決に近づいたと思ったのに、目標がどんどん遠ざかり続けた経験はありませんか? 私はこれに半日を費やし、ドキュメントを調べ、例を探しました...しかし、非常に基本的なものが欠けているに違いありません。
前提:エントリが重複する Smarty 配列があります (Smarty コードはテンプレートでエンコードされているため、今のところ、これを作成する方法を変更することはできません)。これは、ショッピング カートに同じ製品のエントリが複数あるため、問題を引き起こします。正直なところ、これがどのようにまとめられたかの論理を変えることはできません。
これが私が得たものです:
Smarty:
{$products}
私のシナリオでは、{$products} には次のような 4 つのエントリが含まれています。
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 つの正確なコピーを取り除き、1 つだけを残すことができます (上で示したように)。
{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) には 1 つの配列項目が含まれます (上で示したものと同様)。PHP では、is_array で $var をチェックすると、結果は true です。
ただし、Smarty に戻ると、{$newproducts} は NULL です。
元の Smarty 配列 {$products} を再割り当てしようとすると、配列に文字列値を追加できないというエラー メッセージが表示されます。
{$newproducts|@count} を印刷しようとすると、0 が返されます。これは少し混乱します。Smart 配列は 1 から始まるのに対し、PHP 配列は 0 から始まると私は信じているからです。
したがって、PHP は私が割り当てた変数を新しい変数の値として配列と見なしますが、Smarty には配列として取り込まれません。
ここで何が間違っていますか?PHP 配列を Smarty 変数に変換できるように、何らかの方法で分解または分割する必要がありますか?
また、Smarty の元の {$products} 配列を新しい一意の配列値に「リセット」するにはどうすればよいですか?
誰?