How to access "key" and "value" from an array passed to a for loop?
25,607
Solution 1
I think what you are looking for is this:
foreach ($value['options'] as $key=>$option)
Now you can access the key as $key
, and the option as $option
Solution 2
If you want to access the key of an array in a foreach loop, you use the following syntax:
foreach ($array as $key => $value) { ... }
References: foreach
in the PHP documentation
Solution 3
If you want to extract key/value pairs from an associative array, simply use...
foreach ($yourArray as $key => $value) {
...
}
...as per the PHP foreach manual page.
Solution 4
the whole thing can be changed to something like this for better readability...
<?php
$myradiooptions = array(
"grid1" => "Grid View (default)",
"list1" => "List View (1 column)",
"list2" => "List View (2 column)"
);
$value = array(
"name" => "Category Layout",
"desc" => "description goes here",
"id" => "my_category_layout",
"type" => "radio",
"options" => $myradiooptions
);
foreach($value as $key => $val)
{
$formHTML = "<label class='left' for='{$value['id']}'>".$value['name']."</label>";
if(is_array($val))
{
$count = 1;
foreach($val as $k => $v)
{
$formHTML .= "<input type='radio' name='{$v['id']}' id='$count' value='$v' /><label style='color:#666; margin:0 20px 0 5px;' for='$count'>$v</label>";
$count ++;
}
}
$formHTML .= "<label class='description' style='margin-top:-5px;'>".$value['desc']."</label>";
}
//switch, case "radio":
?>
<li class="section">
<?php print $formHTML; ?>
</li>
Author by
Scott B
Updated on March 26, 2020Comments
-
Scott B about 4 years
How can I change the
foreach
loop below so that I can assign the$myradiooption
array'skey
as thevalue
for each input instead of the array'soption
value as I'm now doing (I still want to echo the array'soption
value as the label)?<?php $myradiooptions = array( "grid1" => "Grid View (default)", "list1" => "List View (1 column)", "list2" => "List View (2 column)" ); array( "name" => "Category Layout", "desc" => "description goes here", "id" => "my_category_layout", "type" => "radio", "options" => $myradiooptions ) ); //switch, case "radio": ?> <li class="section"> <label class="left" for="<?php echo $value['id']; ?>"> <?php echo $value['name']; ?> </label> <?php $count=1; foreach ($value['options'] as $option) { ?> <input type="radio" name="<?php echo $value['id']; ?>" id="<?php echo $count; ?>" value="<?php echo $option; ?>" <?php checked($option, get_settings($value['id'])); ?> /> <label style="color:#666; margin:0 20px 0 5px;" for="<?php echo $count; ?>"> <?php echo $option; ?> </label> <?php $count++;} ?> <label class="description" style="margin-top:-5px;"> <?php echo $value['desc']; ?> </label> </li> <?php break;
-
ircmaxell over 13 yearsI would suggest that you improve your formatting. That code is a big jumble. Use consistent indenting and use linebreaks to try to keep your code concise and clear...
-