比较PHP中的2个数组和复选框(保持结构)

时间:2012-08-29 09:46:19

标签: php

我需要将数据库中的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()

1 个答案:

答案 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>";
}