Удаление ключей => пар значений из массива, но не удаление их

Я пытаюсь удалить две пары ключ-значение из массива, я использую код ниже, чтобы отделить ключи, которые я не хочу. Я не понимаю, почему это не приравнивает должным образом. если я удалю ИЛИ (|| $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 ответов

Решение

Это лучший способ сделать это:

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

Предполагая, что вам нужен новый массив $values, В противном случае удалите их прямо из $tests,

Ссылка здесь: http://php.net/unset


Следующее предназначено только для вашего собственного образования в булевой логике, это не так, как вы должны это делать.

Вам нужно изменить || в &&, Вы не хотите ни в результате. С логическим ИЛИ все они пройдут, потому что 4 != 6 а также 6 != 4, Если это ударяет 4 будет работать так:

Вы не равны 4? О, вы равны 4? Что ж, лучшее, что я могу сделать, это позволить тебе, если ты не равен 6.

Если вы измените его на &&, он будет работать примерно так:

Вы номер кроме 4 или 6? Нет? Прости приятель

Кто-то снова споткнулся о законы Де Моргана...

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'=>''));
Другие вопросы по тегам