10

配列から2つのキーと値のペアを削除しようとしています。以下のコードを使用して、不要なキーを分離しています。なぜそれが適切に等しくないのか理解できません。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 != 66 != 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 に答える