Beklenmedik şekilde davranmasıyla PHP içe döngü

2 Cevap php

Belirli bir yazıda ($ link_cat) için kategoriler içeren bir dizi var. Sonra Onay kutularını bir liste halinde all mevcut kategorilerden yazdırmak mysql_fetch_array kullanıyorum. Bu yapıyor yaparken ben, diğer diziden bir değer, bunun üzerinde bulunuyor değerini karşılaştırmak istiyorum. Bir maç varsa, o kategorilerden biri bu makalenin geçerli olduğu anlamına gelir ve bu kontrol niteliğini uygulamak için bir kod satırı yazdırmak gerekir. harika! o = [çalışmıyor dışında

    while ( $row = mysqli_fetch_array($results, MYSQLI_ASSOC) ){
	$cat[$i] = $row['category'];
	$cat_id[$i] = $row['cat_id'];

	echo '<li><input type="checkbox" ';

	$catCount = count($link_cat);
	for ($ct = 0; $ct < $catCount; $ct++){
		if ($cat_id[$i] == $link_cat[$ct]){ 
			echo 'checked="checked" ';
		}
	}

	echo 'name="' . $cat_id[$i] . '" />' . $cat[$i] . '</li>';

	$i++;
}

Ben gerçekten (ben sorunun şu şüpheli) önce bir iç içe döngü yapmamıştım.

Kayıt yok - Sorun bu çalıştığında, $ link_cat [0] içinde karşı kontrol etmek için ilk kategori olacak olan bu gibi görünüyor. Bu boş gelir. Döngü için iç değişkenleri yazdırarak onaylamıştır. [1] [2], vb herhangi bir diğerleri, gayet iyi. Bu sadece [0]. Ama neden? herhangi bir mantıklı görünmüyor. Ben sadece kontrol etmek, onu doldurdum ben dizinin içeriğini basılı çünkü, orada bir şey olduğunu biliyorum. Oysa sadece döngü sırasında görünmüyor. Herhangi bir fikir?

2 Cevap

hafif bug fix (ve bariz tarzı değişikliği): Sizin sürümü kontrol = "kontrol" birden çok kez yazdırabilirsiniz. $cat ve $cat_id diziler olması gerekiyor?

while ( $row = mysqli_fetch_array($results, MYSQLI_ASSOC) ) {
    $cat = $row['category'];
    $cat_id = $row['cat_id'];

    echo '<li><input type="checkbox" ';
    if ( in_array($cat_id, $link_cat) ) {
        echo 'checked="checked" ';
    }
    echo "name='$cat_id' />$cat</li>";
}

Bir normalde bir sorun, bir hata ayıklayıcı atmak durum için, ben bir açıklama bloğu (hata ayıklama çıkışı için view-source, canlı-ish sitelerinde güvenli) güzel bir print_r atmak istiyorum.

echo '<!-- ' . print_r($link_cat, TRUE) . ' -->';

Ben aslında bir sıfırlama ihtiyacı döngü dizi hakkında çok yanlış iken, ben bu diziyi döngü sonra ne yapmak için en hızlı yol değildir duygu tutamadığım.

Belki array_search yapacağını, ya da belki array_key_exists. in_array bir kazanan gibi görünüyorsun ama ben bunu düşünmedim