How to access key and value of an array in smarty template?
Solution 1
Use key
in your foreach
:
{foreach from=$enquiries_labels item=label key=key}
<option value="{$key}" {if $data.key == $key} selected="selected" {/if}>{$label}
</option>
{/foreach}
It's all there in the documentation.
Solution 2
Smarty 3 foreach construction is like this
{foreach $products as $p}
{$p@key}: {$p}
{/foreach}
Solution 3
Use the key
attribute.
{foreach from=$enquiries_labels item="label" key="key"}
<option value="{$key}"{if $data.key == $key} selected="selected"{/if}>{$label}</option>
{/foreach}
Solution 4
this also works
{foreach $products as $product}
key: {$product@key} -> value: {$product@value}
{/foreach}
{$product@value} = {$product}
PHPLover
Updated on July 05, 2022Comments
-
PHPLover almost 2 years
I'm assigning an array named
$enquiries_labels
from php file to a smarty template file. If I print the array in PHP file it's output is as follows:Array ( [0] => New Enquiry [1] => Retail Enquiry [2] => Feedback [3] => Payment Query [4] => Package Query [5] => Test Query )
Now after assigning this array to a smarty file I want to access these values in a select HTML control. For it I need to use foreach loop construct of smarty template engine. If a pre-selected value is matching with the key from array then I'll keep that value selected. For achieving this I tried below code, but it didn't work for me. Can anyone help me in this regard please? For your reference I'm putting below the code I tried in smarty template:
<select name="contact_label" id="contact_label"> {if $enquiries_labels} {foreach from=$enquiries_labels item=label} <option value="{$label.key}" {if $data.key == $label.key} selected="selected" {/if}>{$label.value} </option> {/foreach} {/if} </select>
Thanks for spending some of your valuable time in understanding my issue.
-
MaxZoom almost 7 yearsThis is so much simpler and elegant
-
Paul Spiegel about 6 yearsWhy not
{foreach $products as $key => $p} ...
?