2011-04-13 81 views
1

這是我有:PHP FOREACH ARRAY問題

$prevtag = "1,2,5"; 

$arr; 
$arr["1"] = "BOOKS"; 
$arr["2"] = "MAGAZINES"; 
$arr["3"] = "PAMPHLETS"; 
$arr["4"] = "CD'S"; 
$arr["5"] = "DVD'S"; 

,我需要檢查是否有$ prevtag在$ ARR存在,然後呼應5個複選框:

foreach ($arr as $key => $value) { 
    $checked = in_array($prevtag,$arr) ? '' : 'checked="checked"'; 
    echo "<input name=\"txtTags".$key."\" type=\"checkbox\" id=\"txtTags".$key."\" value=\"on\" $checked />\n"; 
    echo "<label for=\"txtTags".$key."\">".$value."</label>\n"; 
} 

但我m得到所有檢查,而不僅僅是$ prevtag中的那些 - 我做錯了什麼?

+0

你指的是陣列的關鍵? – 2011-04-13 11:42:16

回答

0

in_array($prevtag,$arr)被檢查,如果數組$arr包含值1,2,5

,所以你可以這樣做:

$checked = in_array($key, explode(',', $prevtag)) ? '' : 'checked="checked"'; 
+0

完美!謝謝! – mountainbear 2011-04-13 11:55:57

1
$checked = strpos($prevtag, (string)$key) ? '' : 'checked="checked"'; 

$ prevtag是字符串數組不是 - >所以你不能用它in_array()in_array()不適

+0

謝謝! - 我做了一個字符串 – mountainbear 2011-04-13 12:00:24

2

在您的例子$prevtag是一個字符串,而不是一個數組。

所以,你可以嘗試:

$prevtag = explode(',', $prevtag); 

然後:

foreach ($arr as $key => $value) { 
    $checked = in_array($key, $prevtag) ? '' : 'checked="checked"'; 
    echo "<input name=\"txtTags".$key."\" type=\"checkbox\" id=\"txtTags".$key."\" value=\"on\" $checked />\n"; 
    echo "<label for=\"txtTags".$key."\">".$value."</label>\n"; 
} 
+0

謝謝 - 我做了一個字符串 – mountainbear 2011-04-13 12:00:38

0

要檢查如果 '1,2,5' 裏面 '書' 或 '雜誌' 等

$prevtag = array(1,2,5); 
$checked = in_array($key, $prevtag) ? 'checked="checked"' : '' 
1

製作$prevtag一個數組,並做這樣的事情

$preArray=explode(",",$prevtag); 

foreach ($arr as $key => $value) { 
    $checked = in_array($key,$preArray) ? 'checked="checked"' : ''; 
    ... 
}