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\""; }'));

ただし、製品を 1 次元配列に格納した場合 (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

適切な属性はcheck="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)。すべては、あなたがどのように仕事をしたいかによって異なります。3 番目の演算子は、インライン化する最も簡単な方法です。必要に応じて、単純なifステートメントを使用して属性をエコーすることもできます。

if($items_pool[$item->id]) echo ' checked="checked"';
于 2010-04-09T22:02:38.177 に答える