我有一个数组,它有大约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');
如果要删除null
、undifined
、''
、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
}