循环通过两个数组,而不将结果乘以第一个数组长度*第二个数组长度

时间:2014-07-29 20:59:55

标签: php html checkboxlist

我有两个数组从服务器回复:

  1. 存在的所有过敏症清单
  2. 特定产品中的过敏列表
  3. 我需要显示所有过敏症的复选框列表,并将其他数组中存在的那些标记为已选中。

    第二个数组可以是null

    如何在不将结果乘以array1 * array2的情况下遍历两个数组。

    此代码导致8个复选框输入,因为所有过敏的列表是4,产品只有2个过敏,所以循环执行8次!

    <?php
    $checked ="";
    if (isset($allergies)) {  // array of all allergies
        foreach ($allergies as $key => $value) {
            if(isset ($productAllergies)) {  // array of product allergies
                foreach ($productAllergies as $productkey => $prodValue) {
                    // echo 'product allergy'. $prodValue['allergy_id'] .' general'.$key ;
                    if( $prodValue['allergy_id'] ==$key )
                        $checked ='checked';
                    else
                        $checked ='';
    
    ?>
    <?php
                } // foeach close
            } // if close ?>
                <input type="checkbox" name="allergy[]" value="<?php echo $key; ?>"  <?php echo $checked; ?>/> 
                <label>
                    <?php echo $value; ?>
                </label>
    <?php } // foreach close
    } // if close
    ?>  
    

    有人可以帮助澄清我应该遵循的逻辑,以显示带有选中值的复选框列表。

1 个答案:

答案 0 :(得分:0)

如果我理解正确的格式,这可以起作用:

<?php
  $checked ="";     
  if (isset($allergies)) {  // array of all allergies
      foreach ($allergies as $key => $value) {

          if(isset ($productAllergies)){  // array of product allergies
              $k2 = array_search($key, $productAllergies);
              if (!empty($productAllergies[$k2])) {
                 $checked = 'checked';
              }
           }
       }

   }
  ?>