Smarty: check if variable is in array
Solution 1
After a bit of struggling in all possible directions, I finally managed to pull it off like this (smarty code only)
<select name="c_apps[]" size="3" class="multiselect" multiple="multiple">
{foreach from=$apps key=k item=a}
{if @in_array($k, $code.n_applications)}
{assign var=v value=true}
{else}
{assign var=v value=false}
{/if}
<option value="{$k}"{if $v} selected="selected"{/if}>{$a|escape}</option>
{/foreach}
</select>
And this did the trick.
Solution 2
You can do it like this:
<select name="c_apps[]" size="3" class="multiselect" multiple="multiple">
{foreach from=$apps key=k item=a}
<option value="{$k}"{if in_array($k, $code.n_applications)} selected="selected"{/if}>{$a|escape}</option>
{/foreach}
</select>
Aleks G
My name is Aleks Gekht. I have over 20 years of IT experience, in software development, databases, system administration, business and system analysis and project and programme management. I am Prince 2 certified and have technical hands-on experience with PHP, Java, Perl, VB and VB.NET, C/C++, Pascal MySQL, PostgreSQL, Oracle, DB2, MSSQL HTML/CSS/JavaScript Windows, UN*X/Linux, OSX, Android, iOS With most recent being PHP, Java, C, PostgreSQL, Web development, Android and iOS. I run a small outsourcing company with technical resources located in Georgia, Ukraine and Russia. I am available myself for freelance and contract assignments and can attend to your outsourcing needs providing technical resources at very reasonable rates on a very short notice. I am dual citizen of USA and United Kingdom and fluent in English, Russian and Ukrainian languages. Please contact me for more information: http://www.aagproservices.com aleks [at] aagproservices.com +44 1483 723 820 SOreadytohelp
Updated on August 03, 2022Comments
-
Aleks G almost 2 years
I'm 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 may - and will - grow, this is the reference data, from which
n_applications
array field in the first array is built. That is, the array inn_applications
will contain a subset of keys from the$all_applications
arrays.Now, I'm assigning these two arrays into the template:
$template->assign('code', $code); $template->assign('apps', $all_applications);
And in the template, I'm creating a form for editing the fields in the
$code
array. Everything is working fine except the 'applications' selection. I want to pre-select those apps that are already in then_applications
field. So, in my template I have this:<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 doesn't work as expected - and ALL options end up being selected. I tried using
in_array
function - but with the same result. What's the best way to achieve what I'm after?