【问题标题】:How to remove null values from an array? [duplicate]如何从数组中删除空值? [复制]
【发布时间】:2014-01-07 17:32:20
【问题描述】:

我有一个数组

数组([0] => 0 [1] => [2] => 3 [3] => )

我想从中删除空值,结果应该是这样的

数组 ([0] => 0 [1] => 3) 我不想从数组中删除 0 值。

【问题讨论】:

标签: php arrays


【解决方案1】:

这样就可以了:

array_filter($arr, static function($var){return $var !== null;} );

代码示例:https://3v4l.org/jtQa2


对于旧版本(php

function is_not_null ($var) { return !is_null($var); }
$filtered = array_filter($arr, 'is_not_null');

代码示例:http://3v4l.org/CKrYO

【讨论】:

  • 仅适用于较新的版本,但这比奇怪的 strlen 东西要好得多。
  • 对于旧版本,可以预先声明使用的功能。
  • 您可以完全排除第二个参数; array_filter($arr); 默认会移除 null
  • @AlexP 不,你错了。正如3v4l.org/Y9KCX 所见,您的解决方案将删除empty() 的所有内容-而不仅仅是NULL。
  • @AlexP:如果您关闭过滤器功能,例如字符串“0”将被删除。
【解决方案2】:

您可以使用 array_filter() 来删除数组中的 null 空值

print_r(array_filter($arr, 'strlen'));

【讨论】:

  • 这不起作用。 $ php -r "var_dump(array_filter([0, null, false, 'hi', ''], 'strlen'));"数组(2) { [0] => int(0) [3] => 字符串(2) "hi" }
  • 这也删除了'0'、假或假值,一般可能已经忘记了其他值。
  • 这将包括不为空的''
  • 你甚至可以做 $arr = array_filter($arr);没有回调,它仍然会删除空项目。
【解决方案3】:

你可以循环遍历它。

<?php 
foreach ($array as $i=>$row) {
    if ($row === null)
       unset($array[$i]);
}

CodePad

如果你想重新索引数组以消除键之间的间隙,你可以使用一个新数组:

<?php
$array2 = array();
foreach ($array as $row) {
    if ($row !== null)
       $array2[] = $row;
}
$array = $array2;

CodePad

【讨论】:

    【解决方案4】:

    你现在陷入了一个麻烦的世界,因为要区分 null 与 0 与 false 与 "" 与 0.0 并不太容易。不过不用担心,是可以解决的:

     $result = array_filter( $array, 'strlen' );
    

    这本身很可怕,但似乎有效。

    编辑:

    这是一个糟糕的建议,因为这个技巧依赖于一个奇怪的极端情况:

    • strlen(0) 将为 strlen("0") -> 1,因此为真
    • strlen(NULL) 将为 strlen("")->0,因此为 false
    • strlen("") 将为 strlen(("")->0,因此为 false 等

    你应该这样做的方式是这样的:

     $my_array = array(2, "a", null, 2.5, NULL, 0, "", 8);
    
     function is_notnull($v) {
        return !is_null($v);
      }
    
     print_r(array_filter($my_array, "is_notnull"));
    

    这很好读。

    【讨论】:

      【解决方案5】:
      <?php 
      $arr = array( 0 => 0, 1=>null, 2=>3, 3=>null); 
      foreach ($arr as $key=>$val) {
          if ($val === null)
             unset($arr[$key]);
      }
      $new_arr = array_values($arr);
      print_r($new_arr);
      ?>
      

      输出:

      Array
      (
          [0] => 0
          [1] => 3
      )
      

      【讨论】:

        【解决方案6】:

        简单

        $keys=array_keys($yourArray,NULL);
        if(!empty($keys))
        {
        foreach($keys as $key)
        {
        unset($yourArray[$key]);
        }
        }
        var_dump($yourarray);
        

        【讨论】:

          猜你喜欢
          • 2016-04-11
          • 2018-02-13
          • 2021-09-29
          • 2019-09-05
          • 2021-01-13
          • 2021-04-10
          • 2013-07-25
          • 2019-09-11
          • 2012-09-26
          相关资源
          最近更新 更多