我有2个数组,$ categories_filters和$ adds_filters。他们都返回结果。使用print_r打印时,它们以下列格式返回数据:
$ categories_filters返回如下数据:
Array
(
[0] => Array
(
[filterid] => 67
[catid] => 1
[filtername] => FILTERNAME1
[sorder] => 1
[visible] => 1
)
[1] => Array
(
[filterid] => 68
[catid] => 1
[filtername] => FILTERNAME155
[sorder] => 2
[visible] => 1
)
.....
$ adds_filters返回以下内容:
Array
(
[0] => Array
(
[addfilterid] => 9
[addid] => 5
[filterid] => 67
)
[1] => Array
(
[addfilterid] => 10
[addid] => 5
[filterid] => 163
)
)....
我正在尝试以下方法: 我有$ categories_filters中每个值的复选框。如果filterid存在于$ adds_filters数组中,我希望选中该复选框,否则,我希望该复选框只是显示为未选中。
我试图通过以下代码实现这一目标:
if($categories_filters) {
foreach ($categories_filters as $key1=>$value){
echo "<div class='chb_group'>";
echo "<span class='custom_chb_wrapper'>";
foreach ($adds_filters as $key2=>$af) {
if($af['filterid'] == $value['filterid']) {
echo "<input type='checkbox' name='categoriesfilters[]' id= '".$value['filterid']."' value='" .$value['filterid'] ."' checked = 'checked' class='zcheckbox' />";
} else {
echo "<input type='checkbox' name='categoriesfilters[]' id= '".$value['filterid']."' value='" .$value['filterid'] ."' class='zcheckbox' />";
}
}
echo "<label>" .$value['filtername']. "</label>";
echo "</span>";
echo "</div>"
}
}else {
echo "No filters";
}
快速捕手会意识到我为阵列中的每个值显示了2个复选框,而不是一个(已选中或未选中)
我想这里需要采用不同的方法。
答案 0 :(得分:1)
一个建议是,不是每次循环遍历整个$adds_filters
数组,而是将所有'filterid'
存储到变量中,然后检查该数组中是否存在$value['filterid']
。 />
以下代码使用函数in_array和array_map
试试这个 -
if($categories_filters) {
//Added this
$addfilterids = array_map(function($v){return $v['filterid'];}, $adds_filters);
foreach ($categories_filters as $key1=>$value){
echo "<div class='chb_group'>";
echo "<span class='custom_chb_wrapper'>";
//Modified from here-
if(in_array($value['filterid'], $addfilterids)){
echo "<input type='checkbox' name='categoriesfilters[]' id= '".$value['filterid']."' value='" .$value['filterid'] ."' checked = 'checked' class='zcheckbox' />";
}else{
echo "<input type='checkbox' name='categoriesfilters[]' id= '".$value['filterid']."' value='" .$value['filterid'] ."' class='zcheckbox' />";
}
//^Modified uptil here.
echo "<label>" .$value['filtername']. "</label>";
echo "</span>";
echo "</div>"
}
}