我有一个数组,它包含如下值:
$items_pool = Array (
[0] => Array ( [id] => 1 [quantity] => 1 )
[1] => Array ( [id] => 2 [quantity] => 1 )
[2] => Array ( [id] => 72 [quantity] => 6 )
[3] => Array ( [id] => 4 [quantity] => 1 )
[4] => Array ( [id] => 5 [quantity] => 1 )
[5] => Array ( [id] => 7 [quantity] => 1 )
[6] => Array ( [id] => 8 [quantity] => 1 )
[7] => Array ( [id] => 9 [quantity] => 1 )
[8] => Array ( [id] => 19 [quantity] => 1 )
[9] => Array ( [id] => 20 [quantity] => 1 )
[10] => Array ( [id] => 22 [quantity] => 1 )
[11] => Array ( [id] => 29 [quantity] => 0 )
)
接下来,我有一个我想填充的表单。它循环遍历项目数据库,打印出所有可能的项目,并检查$ items_pool中已存在的项目。
<?php foreach ($items['items_poolpackage']->result() as $item): ?>
<input type="checkbox" name="measure[<?=$item->id?>][checkmark]" value="<?=$item->id?>">
<?php endforeach; ?>
我知道我在这里想要完成什么,但我无法弄清楚编程。
我正在寻找的,松散地写的是这样的(不是真正的代码):
<input type="checkbox" name="measure[<?=$item->id?>][checkmark]" value="<?=$item->id?>" <?php if ($items_pool['$item->id']) { echo "SELECTED"; } else { }?>>
具体来说,这个条件循环遍历数组,通过所有键值(ID),如果匹配,则选中复选框。
<?php if ($items_pool['$item->id']) { echo "SELECTED"; } else { }?>
我从这样的循环中理解,它可能意味着很多“额外”的处理。
TL; DR - 我需要在数组中循环,检查键'id',然后打印一个字符串。
答案 0 :(得分:1)
如果我理解正确,你需要这样的东西吗?
array_walk($items_pool, create_function('$array', 'global $item; if( in_array($item->id, $array) ) { echo "checked=\"checked\""; }'));
考虑到这一点,如果您将产品存储在一维数组中(假设ID始终是唯一的
$items_pool = array(id, quantity)
您不会最终拥有重复的产品条目,并且可以更轻松地增加/减少数量。
$items_pool[id]++; /* or */ $items_pool[id] = $items_pool[id] + 2;
如果数组中存在id, 两种技术都应该。
如果您希望在数组中存储除数量以外的其他attritubes,则可以
$items_pool = array(id=>array(quantity=>3, colour=>"red"));
$items_pool[id][quantity]--;
答案 1 :(得分:0)
检查正确的属性=“已检查”...
if (isset($item_pool[$item->id]) && $item_pool[$item->id] > 0) {
echo ' checked="checked"';
}
答案 2 :(得分:0)
<?php echo ($items_pool[$item->id] ? ' checked="checked" ' : ''); ?>
另一种选择是使用array_keys
抓取所选项目的键,然后执行in_array($item->id, $item_keys)
之类的操作。一切都取决于你对工作的感觉。第三级运算符是您想要内联的最简单方法。如果需要,您还可以使用简单的if
语句来回显该属性。
if($items_pool[$item->id]) echo ' checked="checked"';