0

我需要将数据库中的 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>";
}

到目前为止有效但是,在我检查后输出没有排序:“xxxxl”并提交/请求

我得到这个结果:(x)=选中

s(x) m(x) l(x) xl(x) xxxxl(x) xxxxl() xxl()

我怎样才能让它们排序为$sizedefault

s(x) m(x) l(x) xl(x) xxl() xxxl(x) xxxxl()

4

1 回答 1

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>";
}
于 2012-08-29T09:51:00.297 回答