如何使用PHP从数组中排除空键?

时间:2014-10-02 17:39:31

标签: php arrays key

在数据库中进行查询时,我可以接收两个数组:

Array
(
    [] => 401
    [BETA] => 223
    [GAMMA] => 195
    [DELTA] => 189
)

Array
(
    [ALFA] => 294
    [BETA] => 223
    [GAMMA] => 195
    [DELTA] => 189
)

当密钥为空时,如何排除整行?

我试过这样的事,但没有成功:

foreach($array as $key => $value){
    if(array_key_exists($key, $value) && is_null($value[$key])) {
        unset($key);
    }
    $array = $value;
}

非常感谢提前!

4 个答案:

答案 0 :(得分:3)

密钥不是null,它是一个空字符串。例如:

$foo = array(""=>"bar");
print_r($foo);

输出:

Array
(
    [] => bar
)

因此,您需要empty($key)$key == ''作为测试,区别在于empty() can match quite a few things

答案 1 :(得分:0)

使用empty($var)功能进行评估。它认为这些值为空,如果提供了一个,则返回true:

null:空值

'':空字符串,

0:数字零。仅当它未通过直接或间接分配(例如$ var = 0或$ var = 1-1)分配时。请注意,零字符串('0')不为空,

array():一个空数组,

$var;:未分配的变量,

false:值为false,

' ':只是一个空格字符串。

答案 2 :(得分:0)

由于密钥是空字符串,您可以删除该特定密钥:

$test = array(''=>'test', 'test'=>'test');

unset($test['']);

print_r($test);

或删除仅包含空格的所有键:

function array_remove_blank_keys($array) {

    foreach ($array as $key => $value) {

        if (preg_match('/^\s*$/', $key)) {
            unset($array[$key]);
        }

    }

    return $array;

}

$test = array(''=>'test', 'test'=>'test');

print_r($test);
print_r(array_remove_blank_keys($test));

答案 3 :(得分:-2)

密钥永远不会是空的。他们会有一个数字索引。 因此,只需检查键是否为数字然后取消设置。

foreach($array as $key => $value){
    if(is_numeric($key)) {
        unset($key);
    }

}

并且您不需要执行$ array = $ value;