从PHP数组中删除空值但保留0

10

我有一个数组

array (size=7)
0 => string '2' 
1 => string '' 
2 => string '' 
3 => string '0' 
4 => string '' 
5 => string '' 
6 => string '2.5' 

我使用了:

array_filter()

来删除空值,并返回

Array ( [0] => 2 [6] => 2 )

array_filter()函数可以移除null值和"0"值。

在PHP中有没有内置函数仅移除NULL值呢?


1
你使用了哪个代码与 array_filter() 一起? - Geshode
2
array_filter($array,'strlen') 代码已经运行成功。 - Mukhila Asokan
1
@Athi - 这也会删除空字符串,这与 NULL 不同。您可以使用闭包作为回调来控制筛选的内容。 - But those new buttons though..
1
@AlivetoDie--Anantsingh,你的编码很好用。我想要删除空值。 - Mukhila Asokan
2
"我使用了 array_filter() 来移除空值" -- 您的输入数组并不包含 NULL 值。它包含空字符串(''),但是空字符串并不等同于 NULLNULL 表示没有任何值,而空字符串是长度为 0 的字符串。它们是完全不同的概念。 - axiac
显示剩余3条评论
7个回答

30

5
除了 null'',这也会过滤掉 false - oriadam

16

在 PHP 中,0'' 都被认为是“假”的(falsey),因此在没有特定回调函数的情况下会被 array_filter 删除。上面建议使用 'strlen' 是错误的,因为它也会删除空字符串,这与 NULL 不同。如果要仅删除您要求的 NULL 值,则可以像这样将闭包用作 array_filter() 的回调:

array_filter($array, function($v) { return !is_null($v); });

你的编码有问题,它返回数组中的所有值。 - Mukhila Asokan
3
@Athi - 那是因为你问题中的数组不包含任何NULL值。 - But those new buttons though..
2
不是你的问题 :) 即使我认为 OP 说过 PHP 中有任何内置函数可用于仅删除 NULL 值。 直到编辑 - Aniket Sahrawat
好的。我明白。 - Mukhila Asokan

4
您可以使用array_values()和array_filter()函数一起将数组中的空值删除,然后重新索引数组元素,具体方法如下:
$arr = array("PHP", "HTML", "CSS", "", "JavaScript", null, 0);
print_r(array_values(array_filter($arr)));

输出:

Array
(
    [0] => PHP
    [1] => HTML
    [2] => CSS
    [3] => JavaScript
)

2

如果您的数组可能包含换行符并且您想要过滤它们,那么您可能希望先修剪值:

$arrayItems = ["\r", "\n", "\r\n", "", " ", "0", "a"];
$newArray = array_values(array_filter(array_map('trim', $arrayItems), 'strlen'));
// Output(newArray): ["0", "a"]

//Another great snippet to remove empty items from array
$newArray = array_filter($arrayItems , function ($item) {
    return !preg_match('/^\\s*$/', $item);
    // filter empty lines
});
// Output(newArray): ["0", "a"]

如果您在实施代码时遇到任何问题,请在下面评论。

2
function myFilter($var){
  return ($var !== NULL && $var !== FALSE && $var !== '');
}

$res = array_filter($yourArray, 'myFilter');

如果您只需要数字值,可以使用 is_numeric 作为回调函数。 演示
$res = array_filter($values, 'is_numeric');

0

截至PHP 7.4版本:

$withoutNulls = array_filter($withNulls, static fn($e) => $e !== null);

-2

Remove null values from array

$array = array("apple", "", 2, null, -5, "orange", 10, false, "");

var_dump($array);

echo "<br>";



// Filtering the array

$result = array_filter($array);                 

var_dump($result);

?>


虽然仅有代码的答案可以解决问题,但一些解释将有助于理解此解决方案以及如何将其应用于类似问题。 - Nigel Ren
虽然这段代码片段可能是解决方案,但包括解释真的有助于提高您的帖子质量。请记住,您正在回答未来读者的问题,而这些人可能不知道您的代码建议原因。 - yivi
使用array_filter而没有回调函数会删除PHP可以转换为false的任何值,比如'',0,'0',false,null,[]。你的声明“从数组中删除null值”是不良文档记录,因此我会给予负分,直到提供适当的文档记录为止。 - Alessandro Benoit

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