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>
Share:
25,607
Scott B
Author by

Scott B

Updated on March 26, 2020

Comments

  • Scott B
    Scott B about 4 years

    How can I change the foreach loop below so that I can assign the $myradiooption array's key as the value for each input instead of the array's option value as I'm now doing (I still want to echo the array's option 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
      ircmaxell over 13 years
      I 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...