PHP删除空的null数组键/值,同时保持键/值不为空/null


PHP remove empty, null Array key/values while keeping key/values otherwise not empty/null

我有一个数组,它有大约12个潜在的键/值对。基于_POST/_GET

键不是0-n中的数字键,我需要在适用的情况下保留具有这些值的键。我的问题是,我知道有时会在值为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个键值的数组,并且我不依赖于键和值来确定什么是在哪里和什么时候。如上所述,基本上只会删除所有内容,然后重新构建数组。我陷入困境的地方是想办法模仿上面的功能,但我保留了我需要的钥匙。

如果您想快速删除NULL、FALSE和Empty Strings("),但保留值0(零),则可以使用标准php函数strlen作为回调函数:

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

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

如果我能正确理解你想要的东西,你可以使用array_filter(),也可以这样做:

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

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

如果要删除nullundifined''0'0',但不删除字符串' '


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

为PHP 7.4及以上版本筛选数组时使用此

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

使用+1和键变量跳过数组中的空键

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