我用smarty使用php。在PHP我有兩個陣列:Smarty:檢查變量是否在數組中
$code = Array
(
[n_id] => 1
[t_code] => ABC123
[t_description] => Test code
[b_enabled] => Yes
[n_type] => 3
[dt_start] =>
[dt_end] =>
[n_min_req_gbp] => 0
[n_min_req_usd] => 0
[n_amount_gbp] =>
[n_amount_usd] =>
[n_max_overall_gbp] =>
[n_max_overall_usd] =>
[n_extra] => 6
[b_reuse] => No
[n_applications] => Array
(
[0] => 2
)
)
和
$all_application = Array
(
[1] => New registration
[2] => Mid-subscription upgrade
[3] => Subscription renewal
[4] => Additional purchase
)
注意,第二陣列可以 - 並 - 增長,這是參考的數據,從所述第一陣列中的n_applications
陣列字段是建成。也就是說,n_applications
中的數組將包含$all_applications
陣列中的一部分密鑰。現在
,我指定這兩個數組到模板:
$template->assign('code', $code);
$template->assign('apps', $all_applications);
而且在模板中,我創建一個形式爲$code
數組中編輯的字段。除「應用程序」選擇外,一切工作正常。我想要預先選擇那些已經在n_applications
字段中的應用程序。所以,在我的模板我有這樣的:
<select name="c_apps[]" size="3" class="multiselect" multiple="multiple">
{foreach from=$apps key=k item=a}
{assign var=v value=$k|@array_search:$code['n_applications']}
<option value="{$k}"{if $v!==FALSE} selected="selected"{/if}>{$a|escape}</option>
{/foreach}
</select>
但是預期這並不工作 - 並且所有的選項最終被選中。我嘗試使用in_array
函數 - 但結果相同。什麼是實現我所追求的最好方式?
我想這會讓模板變得更清潔一些,但PHP代碼更加髒兮兮 - 它將HTML特性放到PHP中,這也不是最好的解決方案。但是,如果它能工作... –
I完全同意你的觀點。要清理它,你可能只需設置一個標誌並在你的聰明模板中檢查標誌,我將在我的主要帖子中演示。 – Bjoern
我明白了。有一件事情讓我擔心這種方法有點讓我擔心,我希望我的客戶接下來要問的是,這些代碼以表格的形式顯示,並就地編輯每一個代碼。在這種情況下,同一頁面上會有多個代碼,每個代碼都有自己的應用程序陣列 - 以及一個「all_applications」數組。然後,它會變得非常混亂......但是,無論如何,謝謝。 –