【问题标题】:Remove zero values from a PHP array从 PHP 数组中删除零值
【发布时间】:2010-02-18 09:10:15
【问题描述】:

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

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 数组函数实现吗

【问题讨论】:

    标签: php arrays


    【解决方案1】:

    array_filter 这样做。如果您不提供回调函数,它会过滤掉所有等于 false (boolean conversion) 的值。

    【讨论】:

    • 不错的解决方案。我想我的答案对任何有此问题但要删除的值不为零的人仍然有用。
    • 当需要自定义过滤时,可以将回调与 array_filter() 一起使用。
    【解决方案2】:

    你可以用这个:

    $result = array_diff($array, [0]);   
    

    【讨论】:

      【解决方案3】:

      有点晚了,但是复制和粘贴:

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

      【讨论】:

        【解决方案4】:
        $array = array_filter($array, function($a) { return ($a !== 0); });"
        

        如果要删除零个 AND 空值,正确的代码是:

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

        【讨论】:

        【解决方案5】:

        您可以循环遍历数组并取消设置任何完全等于 0 的项目

        foreach ($array as $array_key => $array_item) {
          if ($array[$array_key] === 0) {
            unset($array[$array_key]);
          }
        }
        

        【讨论】:

        • 如果使用 === 则不工作,但如果我使用 == 则工作
        • 我不会在条件内写$array[$array_key],我会写$array_item,因为它更简单。
        【解决方案6】:

        这也是消除不需要的价值的有效解决方案。

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

        【讨论】:

        • 如果您在此处添加一个简短的解释,您的答案会更好。
        • 为什么您会费心扫描数组以查找循环内第一次出现的零值电流。这是低效的废话。在 foreach 中声明键并有条件地取消设置元素会更简单。这不是一个好的答案。
        【解决方案7】:

        第一种方法:

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

        【讨论】:

          【解决方案8】:

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

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

          【讨论】:

          • 这不是优化的,但是 +1 供您尝试!
          【解决方案9】:

          在 PHP 中简单地删除 null、0 和所有假值形成数组

          $unique_array = [1, true, null, 0, false, "0", 0.0, [], "foo"];

          $结果 = 数组过滤器( $unique_array, 函数($a){ 如果($a !== 0) 返回$a; } ) );

          输出 数组 ( 0 => 1,1 => true,8 => 'foo')

          【讨论】:

          • 这个答案如果不是完全不正确的话,也会误导研究人员。事实是,这个 sn-p 删除了所有虚假值。证明:3v4l.org/OEHY3 任何真正想要这种行为的人都可以简单地依赖默认的array_filter() 行为而无需自定义回调函数。
          • @mickmackusa 感谢您花时间纠正代码行为中的错误...
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2022-12-05
          • 2017-11-24
          • 1970-01-01
          • 2012-09-09
          • 2015-04-02
          • 2016-05-23
          • 2019-02-14
          相关资源
          最近更新 更多