删除键=>数组中的值对,但不删除它们

时间:2011-08-12 03:36:12

标签: php array-unset

我正在尝试从数组中删除两个键值对,我使用下面的代码来分离出我不想要的键。我不明白为什么它不等于正确。如果我删除OR(|| $key != 6)它将正常工作,但我希望有一个if语句。谁能解释我做错了什么?感谢。

$test = array( '1' => '21', '2' => '22', '3' => '23', '4' => '24', '5' => '25', '6' => '26'  );

foreach( $test as $key => $value ) {
    if( $key != 4 || $key != 6 ) {
        $values[$key] = $value;
        echo '<br />';
        print_r( $values );
    }
}

// Output
Array ( [1] => 21 [2] => 22 [3] => 23 [4] => 24 [5] => 25 [6] => 26 ) 

5 个答案:

答案 0 :(得分:19)

这是最好的方法:

$values = $test;
unset($values[4], $values[6]);

假设您需要一个新阵列$values。否则,请直接从$tests删除它们。

参考此处:http://php.net/unset


以下仅适用于您自己的布尔逻辑教育,不是您应该这样做的方式。

您需要将||更改为&&。你不希望 在结果中。使用逻辑OR,所有这些都将通过4 != 66 != 4。如果它命中4,它将按如下方式运行:

  

你不等于4吗?哦,你 等于4?好吧,我能做的最好的就是让你,但如果你不等于6。

如果您将其更改为&&,则会运行如下操作:

  

你是4号还是6号以外的号码?没有?对不起朋友。

答案 1 :(得分:7)

有人再次绊倒De Morgan's laws ......

if( $key != 4 && $key != 6 ) {

答案 2 :(得分:3)

假设你真的不需要循环,这将做同样的事情:

unset($test[4], $test[6])

答案 3 :(得分:2)

你的病情有误。如果你不想拿钥匙4和6那么你的情况应该是这样的

foreach( $test as $key => $value ) {
   if( $key != 4 && $key != 6 ) {

答案 4 :(得分:2)

有一个本机PHP函数:

$values = array_diff_key ($test , array('4'=>'','6'=>''));