我有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' /> ";
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;' /> ";
echo "<span style='line-height:20px;'>".$val['criteriaDescription'] ."</span><br /><br />";
}
}
}
从上面的数组值中可以看出,我应该得到3个复选框,从中应该检查2个。 但是,此代码打印6个复选框而不是3,
6个打印的复选框中的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} />
<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' /> ";
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;' /> ";
echo "<span style='line-height:20px;'>".$val['criteriaDescription'] ."</span><br /><br />";
}
}