10

我正在尝试从数组中删除两个键值对,我正在使用下面的代码来分离出我不想要的键。我不明白为什么它不能正确等同。如果我删除 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 ) 
4

5 回答 5

19

这是最好的方法:

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

假设您需要一个新数组$values。否则直接从$tests.

参考这里: http: //php.net/unset


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

您需要更改||&&. 你不希望结果中的任何一个。使用逻辑 OR,所有这些都将通过,因为4 != 6and 6 != 4。如果它命中4,它将像这样运行:

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

如果将其更改为&&,它将运行如下所示:

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

于 2011-08-12T03:42:17.587 回答
7

有人再次被德摩根的法律绊倒了……

if( $key != 4 && $key != 6 ) {
于 2011-08-12T03:44:25.550 回答
3

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

unset($test[4], $test[6])
于 2011-08-12T03:48:35.650 回答
2

你的条件不对。如果你不想拿钥匙 4 和 6 那么你的情况应该是这样的

foreach( $test as $key => $value ) {
   if( $key != 4 && $key != 6 ) {
于 2011-08-12T03:43:03.767 回答
1

有一个原生 PHP 函数:

$values = array_diff_key ($test , array('4'=>'','6'=>''));
于 2014-04-18T10:53:43.313 回答