循环遍历2个数组以找出应该检查哪些复选框

时间:2014-03-17 16:54:45

标签: php arrays checkbox

我有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个复选框,而不是一个(已选中或未选中)

我想这里需要采用不同的方法。

1 个答案:

答案 0 :(得分:1)

一个建议是,不是每次循环遍历整个$adds_filters数组,而是将所有'filterid'存储到变量中,然后检查该数组中是否存在$value['filterid']。 /> 以下代码使用函数in_arrayarray_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>"
    } 
}