在foreach循环中获取重复的结果 [英] Getting duplicated results in foreach loop
问题描述
我试图根据从mysql检索到的用户信息,使复选框默认为选中状态.运送国家/地区是存储诸如 USA | UK | Asia
之类的字符串的字段.为了查看是否应该选中每个复选框,我制作了一个数组 check_countries
来检查检索到的数据,例如
I'm trying to make checkboxes to be checked by default based on the user's information retrieved from mysql. The shipping countries is a field that stores a string like USA|UK|Asia
. To see if each checkboxes should be checked, I make an array check_countries
to check against the retrieved data like this
$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>";
}
}
}
但是,我得到了重复的结果.每个复选框都有一个彼此相邻的双胞胎:
However, I'm getting duplicated results. Every checkbox has its own twin bother next to each other:
我的预期输出应该是:
<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>
但是现在它返回重复的结果:
But now it returns duplicated results:
○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>
有人可以告诉我如何解决该问题吗?
Can anyone tell me how to fix that?
推荐答案
您正在执行额外的 foreach
,只需检查键是否存在于数组中,就可以使用 in_array
.为了显示全部,只需颠倒数组顺序
You are doing an extra foreach
, just check if the key exists in the array, you can do that using in_array
. And to show all, just reverse the arrays order
<?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;
这篇关于在foreach循环中获取重复的结果的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!