PHP删除空的、null的数组键/值,同时保留键/值,否则不为空/不为null。

13

我有一个数组,大约有12个可能的键/值对。它们是基于_POST/_GET的。

这些键不是数字,而是字符串,我需要在适用的情况下保留键和值。我的问题是我知道偶尔会传递一个键,其值为null、空或等于''。如果是这种情况,我希望在处理数组之前将这些键去掉。因为在没有东西的情况下继续运行会破坏我的脚本。

现在我以前写过或者找过这个函数(我不记得了,它已经在我的工具包里有一段时间了,无论如何都可以使用)。

function remove_array_empty_values($array, $remove_null_number = true)
    {
        $new_array = array();
        $null_exceptions = array();
        foreach($array as $key => $value)
        {
            $value = trim($value);
            if($remove_null_number)
            {
                $null_exceptions[] = '0';
            }
            if(!in_array($value, $null_exceptions) && $value != "")
            {
                $new_array[] = $value;
            }
        }
        return $new_array;
    }

我想做的事情与这个非常相似,但这对于可以具有n-n键值的数组效果很好,而且我不依赖于键和值来确定何时发生什么。由于上面的代码基本上只会删除所有内容,然后重新构建数组。我卡在了如何模仿上面的函数,但保留我需要的键。


1
除非我误解了要求,否则这正是array_filter()的确切功能。 - Michael Berkowski
可能是从PHP数组中删除零值的重复问题。 - hakre
6个回答

27

如果您想快速地移除 NULL、FALSE 和空字符串(""),但保留值为 0(零),您可以使用标准的 PHP 函数 strlen 作为回调函数:

// removes all NULL, FALSE and Empty Strings but leaves 0 (zero) values
$result = array_filter( $array, 'strlen' );

来源: http://php.net/manual/zh/function.array-filter.php#111091


3
注意:这在多维数组上不起作用。 - Marcio Duarte

26

如果我理解你的意思正确,你可以使用array_filter()函数,或者像这样做:

foreach($myarray as $key=>$value)
{
    if(is_null($value) || $value == '')
        unset($myarray[$key]);
}

2
你可以使用 if ( empty( $value ) ) 来使代码更加全面。 - George Cummins
1
@GeorgeCummins:同意,那是一个选项。但从内部来看,它做的事情是一样的,对吧? - Aleks G
2
empty()更全面,因为它还会检查0、false、"0"、0.0、空数组等情况。而且,它的阅读和维护也稍微简单一些。 - George Cummins
@GeorgeCummins 好的,没问题,但这不是他想要的:他说他只想过滤掉 null 和空字符串。 - Aleks G
@chris说:“当值为null、空或等于''时”。既然他特别说了“空”,而没有说“空字符串”,我认为我的解释是正确的。也许询问者需要稍微澄清一下会更有帮助。 - George Cummins

5
array_filter 是一个内置函数,它可以满足您的需求。最多只需要提供自己的回调函数来决定哪些值保留,哪些被删除。键将自动保留,正如函数描述中所述。

例如:

// This callback retains values equal to integer 0 or the string "0".
// If you also wanted to remove those, you would not even need a callback
// because that is the default behavior.
function filter_callback($val) {
    $val = trim($val);
    return $val != '';
}

$filtered = array_filter($original, 'filter_callback');

1

如果你想要移除 nullundefined''0'0',但不想移除字符串 ' '


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

0

如果要过滤 PHP 7.4 及以上版本的数组,请使用以下代码

// Filtering the array
$result = array_filter($array, fn($var) => ($var !== NULL && $var !== FALSE && $var !== ""));

-3

在数组中使用+1与您的键变量,以跳过空键。

foreach($myarray as $key=>$value)
{
    echo $key+1; //skip null key
}

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