Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP删除空的、空的数组键/值,同时保留键/值,否则不为空/空_Php_Arrays - Fatal编程技术网

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

PHP删除空的、空的数组键/值,同时保留键/值,否则不为空/空,php,arrays,Php,Arrays,我有一个数组,它有大约12个潜在的键/值对。基于一个_POST/_GET 键不是0-n中的数字键,我需要在适用的情况下保留具有这些值的键。我的问题是我知道有时会在值为null、空或等于“”的情况下传递密钥。在这种情况下,我希望在处理数组之前修剪掉这些键。因为没有什么东西就跑下去,我的剧本就要被打破了 不久前,我创建或发现了这个函数(但我不记得哪一个函数在我的武库中已经存在了一段时间) 我想做的事情与此非常相似,但是这对可以有n-n个键值的数组很有效,并且我不依赖于键值和值来确定什么是、什么位置和

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

键不是0-n中的数字键,我需要在适用的情况下保留具有这些值的键。我的问题是我知道有时会在值为null、空或等于“”的情况下传递密钥。在这种情况下,我希望在处理数组之前修剪掉这些键。因为没有什么东西就跑下去,我的剧本就要被打破了

不久前,我创建或发现了这个函数(但我不记得哪一个函数在我的武库中已经存在了一段时间)

我想做的事情与此非常相似,但是这对可以有n-n个键值的数组很有效,并且我不依赖于键值和值来确定什么是、什么位置和什么时间。如上所述,将基本上删除所有内容,然后重建阵列。我遇到的困难是试图找出如何模拟上述功能,但我保留了所需的键。

是一个内置功能,它完全可以满足您的需要。最多您需要提供自己的回调,以决定哪些值保留,哪些值删除。根据功能说明,钥匙将自动保留

例如:

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

如果我理解正确,您可以使用
array\u filter()
或执行以下操作:

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

如果希望快速删除NULL、FALSE和空字符串(“”),但保留值0(零),可以使用标准php函数strlen作为回调函数:

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

来源:

将+1与键变量一起使用,以跳过数组中的空键

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

如果要删除
null
未定义的
'
0
'0'
,但不删除字符串
'


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

除非我误解了要求,否则这正是您可能希望使用的
if(empty($value))
更全面的功能。@GeorgeCummins:同意,这是一个选项。在内部,它也做同样的事情-对吗?
empty()
更全面,因为它还检查0、false、“0”、0.0、空数组等。它也更易于读取和维护。@GeorgeCummins Fair,然而,这并不是他想要的:他说他只想过滤掉null和空字符串。@克里斯说:“其中值为null、空或等于“”。”因为他特别说“空”而没有说“空字符串”,所以我认为我的解释是正确的。也许提问者的一点澄清会有所帮助。注意:这不适用于多维数组。

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