Как сделать так, чтобы эти поля автоматически заполнялись из базы данных? - PullRequest
0 голосов
/ 10 апреля 2010

У меня есть массив, который содержит такие значения:

$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 { }?>>

В частности, этот условный цикл проходит через массив, через все значения ключей (идентификатор) и, если есть совпадение, флажок установлен.

<?php if ($items_pool['$item->id']) { echo "SELECTED"; } else { }?>

Я понимаю из цикла, подобного этому, что это может означать много «дополнительной» обработки.

TL; DR - мне нужно выполнить цикл внутри массива, проверить ключ 'id', а затем напечатать строку.

Ответы [ 3 ]

1 голос
/ 10 апреля 2010

Если я правильно понимаю, вам нужно что-то подобное?

array_walk($items_pool, create_function('$array', 'global $item; if( in_array($item->id, $array) ) { echo "checked=\"checked\""; }'));

Учтите, что если вы храните свои продукты в одномерном массиве (при условии, что идентификаторы всегда будут уникальными

$items_pool = array(id, quantity)

У вас не будет дублирующихся записей продуктов, и вы можете увеличить / уменьшить количество проще.

$items_pool[id]++; /* or */ $items_pool[id] = $items_pool[id] + 2;

Оба метода должны работать, если идентификатор существует в массиве или нет.

Если вы хотите хранить в этом массиве другие атрибуты, кроме количества, вы можете

$items_pool = array(id=>array(quantity=>3, colour=>"red"));    
$items_pool[id][quantity]--;
0 голосов
/ 10 апреля 2010
<?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"';
0 голосов
/ 10 апреля 2010

Правильный атрибут проверен = "проверен" ...

if (isset($item_pool[$item->id]) && $item_pool[$item->id] > 0) {
    echo ' checked="checked"';
}
...