Nasıl bu alanları veritabanından autopopulate yapabilirim?

3 Cevap php

Böyle değerleri tutan bir dizi var:

$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 ) 
) 

Sonra, ben doldurmak için çalışıyorum bir form var. Bu madde veritabanı üzerinden döngüler tüm olası öğeleri yazdırır, zaten $ items_pool mevcut olanları denetler.

<?php foreach ($items['items_poolpackage']->result() as $item): ?>

<input type="checkbox" name="measure[<?=$item->id?>][checkmark]" value="<?=$item->id?>"> 

<?php endforeach; ?>

Ben burada gerçekleştirmek için çalışıyorum mantıklı biliyorum, ama ben programlama anlamaya olamaz.

Ne yazılı, arıyorum gevşek gibi bir şey bu (gerçek değil code):

<input type="checkbox" name="measure[<?=$item->id?>][checkmark]" value="<?=$item->id?>" <?php if ($items_pool['$item->id']) { echo "SELECTED"; } else { }?>>

Tüm anahtar değerleriyle (ID) aracılığıyla dizi aracılığıyla ve bir maç varsa, onay kutusunun seçili özellikle bu koşullu döngü.

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

Ben o 'ekstra' işleme bir sürü anlamına gelebilir bu gibi yapılandırılmış bir döngü anlıyoruz.

TL;DR - Ben dizi içinde döngü gerekir, anahtar 'id' için kontrol edin, sonra bir dize yazdırmak.

3 Cevap

Eğer doğru anlamak, sen böyle bir şey gerekiyor?

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

Eğer kimlikleri küstah tek boyutlu bir dizi (ürünlerinizi saklandığı takdirde bu olsa incele, her zaman benzersiz olacak

$items_pool = array(id, quantity)

Eğer bir ürün girişlerini çoğaltılamaz olan ile sonuna kadar ve incremement olabilir / daha kolay miktarını azaltma olmaz.

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

Id dizi veya değil varsa Hem teknikleri should çalışır.

Eğer miktar dışında bu dizide diğer attritubes saklamak için umut varsa, yapabilirsiniz

$items_pool = array(id=>array(quantity=>3, colour=>"red"));    
$items_pool[id][quantity]--;

= "Kontrol" uygun nitelik kontrol edilir ...

if (isset($item_pool[$item->id]) && $item_pool[$item->id] > 0) {
    echo ' checked="checked"';
}
<?php echo ($items_pool[$item->id] ? ' checked="checked" ' : ''); ?>

Başka bir seçenek kullanmak için array_keys Seçilen öğelerin tuşları kapmak ve sonra in_array($item->id, $item_keys) gibi bir şey yapmak olacaktır. Tüm işi gibi hissediyorum nasıl bağlıdır. Üçüncül operatörleri satır içi istediğinizi yapmak için en kolay yoldur. Ayrıca bunu isterseniz niteliğini yankı basit bir if deyimini kullanabilirsiniz.

if($items_pool[$item->id]) echo ' checked="checked"';