如何使这些字段从数据库中自动填充?

时间:2010-04-09 21:24:17

标签: php html loops conditional repopulation

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

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

3 个答案:

答案 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"';