从PHP数组中删除零值

50

我有一个普通的数组,就像这样

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数组函数可以实现?

7个回答

105

array_filter可以做到这一点。如果您没有提供回调函数,则它将过滤掉所有等于false布尔转换)的值。


2
不错的解决方案。我想我的答案仍对任何遇到这个问题但要移除的值非零的人有用。 - Jon Winstanley
2
当需要自定义过滤时,可以使用回调函数与array_filter()一起使用。 - salathe

11

有点晚了,但复制并粘贴:

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

8
你可以遍历数组并取消任何等于0的项目。
foreach ($array as $array_key => $array_item) {
  if ($array[$array_key] === 0) {
    unset($array[$array_key]);
  }
}

如果使用 ===,它不起作用,但如果使用 ==,它就可以工作。 - Shiv Singh
我不会在条件语句中写 $array[$array_key],而是写 $array_item,因为更简单。 - mickmackusa

7
您可以使用以下内容:
$result = array_diff($array, [0]);   

4

第一种方法:

<?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>";
  ?>

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

如果您要删除零和空值,正确的代码如下:

如果您想要删除零 并且 空值,则正确的代码是:

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

第二个代码片段的一些测试:https://3v4l.org/cc2vm - mickmackusa
你的第一行末尾有一个“漂泊”的引号。 - Paul Phillips

0

如果您不关心保留键到数据的相关性,您可以使用这个单行技巧:

<?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)

这并不是优化过的,但为你的尝试加一分! - Amir Fo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接