在foreach循环中取消设置值不起作用

时间:2013-08-24 13:53:52

标签: php arrays

我有数组$allowedViewLevels,其中包含以下示例元素:

Array (
    [0] => 1
    [1] => 1
    [2] => 2
    [3] => 3
    [4] => 4
    [5] => 6
    [6] => 7
    [7] => 8
    [8] => 9
    [9] => 10
    [10] => 11
    [11] => 12
) 

我想循环遍历此数组并检查值是否等于1,8或11.如果是,则应从数组中删除相应的元素。

为此,我使用了以下脚本:

foreach ($allowedViewLevels as $key) {
    if($key==1 || $key==8 || $key==11){
        unset($allowedViewLevels[$key]);
    } 
};

$niveis=implode(",", $allowedViewLevels);
print $niveis;  

返回:

1,2,3,4,6,7,8,10,11 

因此,数组中包含值1,8或11的元素不会从中取消。这个脚本有什么问题?

2 个答案:

答案 0 :(得分:2)

我自己找到了答案(在this post)

的帮助下

它适用于以下内容:

$allowedViewLevels=array_diff($allowedViewLevels, array(1,8,11));
$niveis=implode(",", $allowedViewLevels);
print $niveis; 

答案 1 :(得分:1)

数组包含[key] => value

foreach循环中,您应该这样参考:

foreach ($allowedViewLevels as $key=>$value) {
    if ($value == 1 || $value == 8 || $value == 11) {
        unset($allowedViewLevels[$key]);
    }
} // Also: no semicolon here...

$niveis = implode(",", $allowedViewLevels);
echo $niveis;

但是,你自己已经找到了答案,感谢你!