为多维数组中的特定键生成复选框

时间:2016-07-19 14:09:12

标签: php arrays checkbox multidimensional-array

我有2个多维数组$investmentProgramExistingCriteriaoutput$criteria,打印时(print_r)会产生以下输出:

数组$ investmentProgramExistingCriteriaoutput:

Array
(
[0] => Array
    (
        [key1] => 1
        [key2] => 4
        [criteriaID] => 25
    )

[1] => Array
    (
        [key1] => 2
        [key2] => 4
        [criteriaID] => 26
    )

)

数组$条件输出:

Array
(
[0] => Array
    (
        [criteriaID] => 27
        [key3] => 1
        [key4] => Some value
        [key5] => Yes
        [key6] => 3
        [key7] => 1
    )

[1] => Array
    (
        [criteriaID] => 25
        [key3] => 5
        [key4] => Some other value
        [key5] => 1, 2, 3
        [key6] => 1
        [key7] => 1
    )

[2] => Array
    (
        [criteriaID] => 26
        [key3] => 1
        [key4] => Some different value
        [key5] => Ναί
        [key6] => 1
        [key7] => 1
    )

)

我正在尝试为$criteria数组中的每个项生成复选框。但是,如果criteriaID数组中$criteria数组中存在$investmentProgramExistingCriteriaoutput,则应选中该复选框,否则应取消选中该复选框。

我正在尝试使用以下代码:

foreach ($criteria as $val) {
    foreach ($investmentProgramExistingCriteria as $existingcriteria) {
        if($val['criteriaID'] == $existingcriteria['criteriaID']) {
            echo "<input type='checkbox' name='criteria[]' value=".$val['criteriaID']." style='margin-bottom:20px;float:left;' checked='checked' />&nbsp;&nbsp;&nbsp;";
            echo "<span style='line-height:20px;'>".$val['criteriaDescription'] ."</span><br /><br />";  
        } else {
            echo "<input type='checkbox' name='criteria[]' value=".$val['criteriaID']." style='margin-bottom:20px;float:left;' />&nbsp;&nbsp;&nbsp;";
            echo "<span style='line-height:20px;'>".$val['criteriaDescription'] ."</span><br /><br />";   
        }
    }
}

从上面的数组值中可以看出,我应该得到3个复选框,从中应该检查2个。 但是,此代码打印6个复选框而不是3,

6个打印的复选框中的2个被检查(正确)。如何摆脱重复的复选框?

2 个答案:

答案 0 :(得分:2)

您可以尝试迭代第一个数组(为了简洁而重命名)并将criteriaID分配到新数组中,而不是嵌套循环。然后遍历criteria数组并查看该值是否存在。

$ipec=array(
    array('k1'=>1,'k2'=>4,'criteriaID'=>25),
    array('k1'=>2,'k2'=>4,'criteriaID'=>26)
);
$criteria=array(
    array('criteriaID'=>27,'k3'=>1,'k4'=>4),
    array('criteriaID'=>25,'k3'=>1,'k4'=>4),
    array('criteriaID'=>26,'k3'=>1,'k4'=>4)
);

$cids=array();
foreach($ipec as $a)$cids[]=$a['criteriaID'];


foreach($criteria as $a){
    $c=$a['criteriaID'];
    $checked = in_array( $c, $cids ) ? 'checked=true' : '';

    /* There is no key "criteriaDescription" in the quoted arrays */
    echo "
        <input type='checkbox' name='criteria[]' value='{$c}' style='margin-bottom:20px;float:left;' {$checked} />
        &nbsp;&nbsp;&nbsp;
        <span style='line-height:20px;'>{$val['criteriaDescription']}</span>
        <br />
        <br />";
}

答案 1 :(得分:1)

当你在处理数组

时,你当然会在内循环中获得这两个条件

而是从$investmentProgramExistingCriteria构建一个仅包含您感兴趣的字段的数组,并使用in_array()在每个外部循环中执行一次测试

$existingcriteria = array_column($investmentProgramExistingCriteria, 'criteriaID');

foreach ($criteria as $val) {

    if ( in_array($val['criteriaID'], $existingcriteria ) {
        echo "<input type='checkbox' name='criteria[]' value=".$val['criteriaID']." style='margin-bottom:20px;float:left;' checked='checked' />&nbsp;&nbsp;&nbsp;";
        echo "<span style='line-height:20px;'>".$val['criteriaDescription'] ."</span><br /><br />";  
    } else {
        echo "<input type='checkbox' name='criteria[]' value=".$val['criteriaID']." style='margin-bottom:20px;float:left;' />&nbsp;&nbsp;&nbsp;";
        echo "<span style='line-height:20px;'>".$val['criteriaDescription'] ."</span><br /><br />";     
    }
}