I am using php with smarty. In php, I have two arrays:
$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 ) )
and
$all_application = Array ( [1] => New registration [2] => Mid-subscription upgrade [3] => Subscription renewal [4] => Additional purchase )
Note that the second array can - and will - grow, this is the reference data from which the n_applications array n_applications embedded in the n_applications array n_applications . That is, the array in n_applications will contain a subset of the keys from the $all_applications .
Now I assign these two arrays to a template:
$template->assign('code', $code); $template->assign('apps', $all_applications);
And in the template, I create a form for editing fields in the $code array. Everything works fine, except for the choice of "applications." I want to pre-select those applications that are already in the n_applications field. So, in my template, I have the following:
<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>
However, this does not work as expected - and all options will be selected. I tried using the in_array function - but with the same result. What is the best way to achieve what I want?
source share