【问题标题】:Getting duplicated results in foreach loop在 foreach 循环中获取重复的结果
【发布时间】:2014-10-02 07:05:26
【问题描述】:

我正在尝试根据从 mysql 检索到的用户信息默认检查复选框。发货国家/地区是一个存储类似USA|UK|Asia 的字符串的字段。要查看是否应检查每个复选框,我创建了一个数组 check_countries 来检查检索到的数据,如下所示

        $country_html ="";
        $check_countries = array("Europe","Americas","USA","Australia","UK","Africa","Asia","Global");

        $shipping_countries = explode("|",$shipping_countries); // e.g USA|UK|Asia
        foreach($shipping_countries as $shipping_country)
        {
          foreach($check_countries as $check_country)
          {
              if($check_country == $shipping_country)
              {
                 $country_html .= "<label for='".$check_country."'><input id='".$check_country."' type='checkbox' name='shipcountries[]' value='".$check_country."' checked>".$check_country."</label>";
              } 
              else
              {
                 $country_html .= "<label for='".$check_country."'><input id='".$check_country."' type='checkbox' name='shipcountries[]' value='".$check_country."'>".$check_country."</label>";
              }
           }
         }

但是,我得到了重复的结果。每个复选框都有自己的双胞胎:

我的预期输出应该是:

<label for="Europe"><input id="Europe" type="checkbox" name="countries[]" value="Europe">Europe</label>
<label for="Americas"><input id="Americas" type="checkbox" name="countries[]" value="Americas">Americas</label>
<label for="USA"><input id="USA" type="checkbox" name="countries[]" value="USA" checked>USA</label>
<label for="Australia"><input id="Australia" type="checkbox" name="countries[]" value="Australia">Australia</label>
<label for="UK"><input id="UK" type="checkbox" name="countries[]" value="UK" checked>UK</label>
<label for="Africa"><input id="Africa" type="checkbox" name="countries[]" value="Africa">Africa</label>
<label for="Asia"><input id="Asia" type="checkbox" name="countries[]" value="Asia" checked>Asia</label>
<label for="Global"><input id="Global" type="checkbox" name="countries[]" value="Global">Global</label>

但现在它返回重复的结果:

○Europe ○Europe ○Americas ○Americas ○USA ○USA ○Australia ○Australia ○UK ○UK ○Africa ○Africa ○Asia ○Asia ○Global ○Global

<label for="Europe"><input id="Europe" type="checkbox" name="countries[]" value="Europe" checked="">Europe</label>
<label for="Europe"><input id="Europe" type="checkbox" name="countries[]" value="Europe">Europe</label>
<label for="Americas"><input id="Americas" type="checkbox" name="countries[]" value="Americas">Americas</label>
<label for="Americas"><input id="Americas" type="checkbox" name="countries[]" value="Americas">Americas</label>
<label for="USA"><input id="USA" type="checkbox" name="countries[]" value="USA">USA</label>
<label for="USA"><input id="USA" type="checkbox" name="countries[]" value="USA">USA</label>
<label for="Australia"><input id="Australia" type="checkbox" name="countries[]" value="Australia">Australia</label>
<label for="Australia"><input id="Australia" type="checkbox" name="countries[]" value="Australia">Australia</label>
<label for="UK"><input id="UK" type="checkbox" name="countries[]" value="UK">UK</label>
<label for="UK"><input id="UK" type="checkbox" name="countries[]" value="UK">UK</label>
<label for="Africa"><input id="Africa" type="checkbox" name="countries[]" value="Africa">Africa</label>
<label for="Africa"><input id="Africa" type="checkbox" name="countries[]" value="Africa" checked="">Africa</label>
<label for="Asia"><input id="Asia" type="checkbox" name="countries[]" value="Asia">Asia</label>
<label for="Asia"><input id="Asia" type="checkbox" name="countries[]" value="Asia">Asia</label>
<label for="Global"><input id="Global" type="checkbox" name="countries[]" value="Global">Global</label>
<label for="Global"><input id="Global" type="checkbox" name="countries[]" value="Global">Global</label>

谁能告诉我如何解决这个问题?

【问题讨论】:

  • 我没有看到任何会产生重复复选框的东西。您能给我们展示一些生成的 HTML 表单吗?
  • @TunaMaxx,我已经更新了帖子。

标签: php html loops foreach


【解决方案1】:

您正在做一个额外的foreach,只需检查该键是否存在于数组中,您可以使用in_array 来做到这一点。为了显示全部,只需颠倒数组顺序

<?php

$shipping_countries = "USA|UK|Asia";
$check_countries = array("Europe","Americas","USA","Australia","UK","Africa","Asia","Global");

$shipping_countries = explode("|",$shipping_countries); // e.g USA|UK|Asia
foreach($check_countries as $check)
{
  if(in_array($check, $shipping_countries))
  {
     $country_html .= "<label for='".$check."'><input id='".$check."' type='checkbox' name='shipcountries[]' value='".$check."' checked>".$check."</label>";
  } 
  else
  {
     $country_html .= "<label for='".$check."'><input id='".$check."' type='checkbox' name='shipcountries[]' value='".$check."'>".$check."</label>";
  }
 }

echo $country_html;

【讨论】:

  • 只显示那些来自检索到的字符串,例如美国、英国、亚洲。其他未选中的按钮呢?
猜你喜欢
  • 2014-10-22
  • 2015-09-18
  • 1970-01-01
  • 2011-12-03
  • 2020-04-19
  • 1970-01-01
  • 1970-01-01
  • 2017-09-11
  • 1970-01-01
相关资源
最近更新 更多