Удалить нулевые значения из массива PHP

У меня есть нормальный массив, как это

Array
(
    [0] => 0
    [1] => 150
    [2] => 0
    [3] => 100
    [4] => 0
    [5] => 100
    [6] => 0
    [7] => 100
    [8] => 50
    [9] => 100
    [10] => 0
    [11] => 100
    [12] => 0
    [13] => 100
    [14] => 0
    [15] => 100
    [16] => 0
    [17] => 100
    [18] => 0
    [19] => 100
    [20] => 0
    [21] => 100
)

Мне нужно удалить все 0 из этого массива, возможно ли это с помощью функции массива PHP


person Elitmiar    schedule 18.02.2010    source источник


Ответы (9)


array_filter делает это. Если вы не предоставляете функцию обратного вызова, она отфильтровывает все значения, равные false (логическое преобразование).

person Gumbo    schedule 18.02.2010
comment
Хорошее решение. Я полагаю, что мой ответ остается полезным для всех, у кого есть эта проблема, но значение для удаления не равно нулю. - person Jon Winstanley; 18.02.2010
comment
Обратный вызов можно использовать с array_filter(), когда необходимо настроить фильтрацию. - person salathe; 18.02.2010

Вы можете просто прокрутить массив и сбросить все элементы, которые точно равны 0

foreach ($array as $array_key => $array_item) {
  if ($array[$array_key] === 0) {
    unset($array[$array_key]);
  }
}
person Jon Winstanley    schedule 18.02.2010
comment
это не работает, если я использую ===, но работает, если я использую == - person Shiv Singh; 25.11.2019

Первый метод:

<?php
    $array = array(0,100,0,150,0,200);

    echo "<pre>";
    print_r($array);
    echo "</pre>";

    foreach($array as $array_item){
            if($array_item==0){
               unset($array_item);
        }
        echo"<pre>";
        print_r($array_item);
        echo"</pre>";
    }
?>

Второй метод: используйте функцию array_diff.

  <?php
    $array = array(0,100,0,150,0,200);
    $remove = array(0);
    $result = array_diff($array, $remove);                          
    echo"<pre>";
    print_r($result);
    echo"</pre>";
  ?>
person thecodedeveloper.com    schedule 25.04.2013

немного поздно, но скопируйте и вставьте:

$array = array_filter($array, function($a) { return ($a !== 0); });
person Slav    schedule 06.09.2016

Вы можете использовать это:

$result = array_diff($array, [0]);   
person Amir Fo    schedule 12.03.2019

$array = array_filter($array, function($a) { return ($a !== 0); });"

если вы хотите удалить нулевые И пустые значения, правильный код:

$array = array_filter($array, function($a) { return ($a !== 0 AND trim($a) != ''); });
person krez    schedule 06.09.2019

Если вы не заботитесь о сохранении ключа к корреляциям данных, вы можете использовать этот трюк с одной строкой:

<?php
$a = array(0, 150, 0, 100, 0, 100, 0, 100);

$b = explode('][', trim(str_replace('[0]', '', '['.implode('][', $a).']'), '[]'));

print_r($b); // Array ([0] => 150 [1] => 100 [2] => 100 [3] => 100)
person Geoffray Warnants    schedule 12.05.2016
comment
Это не оптимизировано, но +1 за вашу попытку! - person Amir Fo; 12.03.2019

Просто удалите нулевой или нулевой массив значений из массива в php

$array = array_filter($unique_array, function($a) { if($a !== 0) return $a; });
person Muhammad Azeem    schedule 18.03.2021

Это также эффективное решение для удаления нежелательной ценности.

 <?php
   $array = array(0,100,0,150,0,200);
   foreach($array as $a){    
   if (false !== $key = array_search("0", $array)){        
   unset($array[$key]);    
   }    
   }    
   print_r($array);    
   ?>      
person Jumper Pot    schedule 22.08.2019
comment
Ваш ответ был бы намного лучше, если бы вы добавили краткое объяснение того, что здесь происходит. - person Bonifacio2; 22.08.2019