我需要将数据库中的2个数组与可用的布料大小进行比较 和默认大小
$sizedefault = array('s','m','l','xl','xxl','xxxl','xxxxl','xxxxxl'); // Default Sizes
$sizeavailable = explode(',',$pd_size); // Available Sizes (db) s,m,l,xl
$available = array_diff($sizedefault , $sizeavailable );
$notavailable = array_intersect($sizeavailable , $sizedefault);
$output = "";
foreach ($notavailable as $value){
$output .= "<input type=\"checkbox\" name=\"size[]\" id=\"$value\" value=\"$value\" checked=\"checked\"/><label for=\"$value\">".$value."</label>";
}
foreach($available as $value){
$output .= "<input type=\"checkbox\" name=\"size[]\" id=\"$value\" value=\"$value\" /><label for=\"$value\">".$value."</label>";
}
到目前为止工作的但是,在检查例如:&#34; xxxxl&#34;之后输出没有排序。并提交/请求
我得到这个结果:(x)=已检查
s(x)m(x)l(x)xl(x)xxxxl(x)xxxxxl()xxl()
我如何将它们排序为$sizedefault
?
s(x)m(x)l(x)xl(x)xxl()xxxxl(x)xxxxxl()
答案 0 :(得分:1)
没有必要事先构建这些数组 - 您可以使用in_array()
在循环运行时检查可用性数组中是否存在值。最好也是因为您不必复制复选框的HTML代码,唯一的区别是checked="checked"
的存在,您可以有条件地添加。
$sizedefault = array('s','m','l','xl','xxl','xxxl','xxxxl','xxxxxl'); // Default Sizes
$sizeavailable = explode(',',$pd_size); // Available Sizes (db) s,m,l,xl
$output = "";
foreach ($sizedefault as $value){
$checked = in_array($value, $sizeavailable) ? ' checked="checked"' : '';
$output .= "<input type=\"checkbox\" name=\"size[]\" id=\"$value\" value=\"$value\" $checked /><label for=\"$value\">".$value."</label>";
}
如果$sizedefault
来自外部源(例如用户,cookie,类似的东西),或者在保存到数据库之前来自外部源,您还应该在打印之前转义其中的值它变成了HTML。您可以使用htmlspecialchars()
执行此操作。否则,人们就可以将脚本注入HTML。
foreach ($sizedefault as $value){
$checked = in_array($value, $sizeavailable) ? ' checked="checked"' : '';
$value = htmlspecialchars($value);
$output .= "<input type=\"checkbox\" name=\"size[]\" id=\"$value\" value=\"$value\" $checked /><label for=\"$value\">".$value."</label>";
}