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