如何从数组中删除空值? [复制]

Posted

技术标签:

【中文标题】如何从数组中删除空值? [复制]【英文标题】: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.net/array_filter 带有自定义回调。 在 php.net 上查找数组过滤器 简单解决方案:***.com/a/66004034/7186739 【参考方案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);

【讨论】:

以上是关于如何从数组中删除空值? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何从数组中删除特定对象? [复制]

如何从 Swift 数组中删除这个对象? [复制]

加入后如何删除具有非空值的重复列? [复制]

如何从 Python 数组中删除多余的空格? [复制]

如果数组存在于另一个多维数组中,如何从多维数组中删除该数组? [复制]

如何从数组中删除文档? [复制]