0

我有一个数组,其中包含如下值:

$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”,然后打印一个字符串。

4

3 回答 3

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 存在于数组中,这两种技术都应该有效。

如果您希望在此数组中存储除数量以外的其他属性,您可以

$items_pool = array(id=>array(quantity=>3, colour=>"red"));    
$items_pool[id][quantity]--;
于 2010-04-09T22:46:28.747 回答
0

正确的属性是checked="checked"...

if (isset($item_pool[$item->id]) && $item_pool[$item->id] > 0) {
    echo ' checked="checked"';
}
于 2010-04-09T21:27:49.197 回答
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"';
于 2010-04-09T22:02:38.177 回答