移除键=>数组中的值对,但它没有删除它们


Removing key => value pairs from an array, but its not removing them

我试图从数组中删除两个键值对,我使用下面的代码来隔离出我不想要的键。我不明白为什么不能恰当地等号。如果我删除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 ) 

这是最好的方法:

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

假设您需要一个新的数组$values。否则直接从$tests中移除

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


下面只是为了你自己学习布尔逻辑,这不是你应该做的

您需要将||更改为&&。结果中既不需要,也不需要。使用逻辑或,因为4 != 66 != 4,它们都将通过。如果它到达4,它将像这样运行:

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

如果你把它改成&&,它会像这样运行:

你是4或6之外的数字吗?没有?对不起朋友。

又有人被De Morgan定律绊倒了…

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

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

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

您的病情不对。如果你不想要键4和键6,那么你的条件应该是这样的

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

有一个本地PHP函数:

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