2011-04-13 80 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"' : ''; 
    ... 
}