如何使用in_array WITH EXCEPTIONS检查空值?

时间:2015-11-24 05:47:34

标签: php arrays

我试图找出如何检查具有某些异常的数组的空值。这是数组:

[name_first] => Name
[name_last] => 
[email] => blah@blah.com
[address] => 
[country] => USA

有两个空值 - name_last& address。这是代码:

if (in_array(null, $data)) {
   echo 'empty values';
  }else{
     echo 'ok'; 
  }

它将false返回[address][name_last]值为empty。如何忽略特定键(假设为[address])?基本上应该看起来像这样:

if (in_array(null, $data) **&& key_is_not('address', 'hatever')**) {
   echo 'empty values';
  }else{
     echo 'ok'; 
  }

6 个答案:

答案 0 :(得分:1)

这将检查是否设置了值并且长度是否大于0,而不是空字符串。

foreach($elements as $key => $data)
{
    if(!in_array($key, ['address', 'something']))
    {
        if(count($data) > 0)
        {
            //stuff
        }
    }
}

答案 1 :(得分:1)

试试这个:

$data = array('name_first' => "Name",
'name_last' => "",
'email' => "blah@blah.com",
'address' => "",
'country' => "USA");


foreach ($data as $key => $value) {
  if($value=="")
    echo "$key is Empty\n";
}

<强>更新

要从支票中排除特定键,您可以这样做:

$data = array('name_first' => "",
'name_last' => "",
'email' => "blah@blah.com",
'address' => "",
'country' => "");

$array = array("name_first","country");
foreach ($data as $key => $value) {
  if($value=="" and (!in_array($key, $array)))
    echo "$key is Empty\n";
}

答案 2 :(得分:1)

$input_array = [
    'name_first' => 'Name',
    'name_last' => '',
    'email' => 'blah@blah.com',
    'address' => '',
    'country' => 'USA',
    ];

过滤数组,忽略特定键,此处为addressname_last

$ignore_search = in_array('', array_filter($input_array, function($k){
        return !in_array($k, ['address', 'name_last']);
    }, ARRAY_FILTER_USE_KEY));

此处array_filter将取消设置内部指定的键。

根据发现的匹配程序返回布尔值,如果你想要密钥,只需用in_array更改array_search

答案 3 :(得分:1)

你也可以通过编写一个能处理密钥异常的自定义函数来忽略密钥,这样你就可以更好地控制它,如果你想在以后稍微调整一下:

if (in_array_except(null, $data, array("address"))) {
    echo 'empty values';
}else{
    echo 'ok';
}

该功能将是:

function in_array_except($needle, $haystack, $exception = array(), $strict = false) {
    if ($strict) {
        foreach($haystack as $needle_field => $item) {
            if (!in_array($needle_field, $exception) && $item === $needle) 
                    return true; 
        }
    } else {
        foreach($haystack as $needle_field => $item) {
            if (!in_array($needle_field, $exception) && $item == $needle) 
                    return true; 
        }
    }
    return false;
}

使用您当前的数据集:

[name_first] => Name
[name_last] => 
[email] => blah@blah.com
[address] => 
[country] => USA

示例代码段的输出是:

empty values

答案 4 :(得分:0)

尝试array_search(),如下所示::

if (array_search("", $arr)) {
    echo 'empty values';
} else {
    echo 'ok'; 
}

**更新**

$array_var = array("11" => 111, "22" => 222, "33" => 333, "44" => 444, "55" => "", "66" => 666);
$new_array_var = array();

foreach ($array_var as $key => $value) {
//  echo $key . "==>" . $value . "<br/>";
    if (isset($value) && $value != "") {
        $new_array_var[$key] = $value;
    }
}

echo "<pre>";

echo "OLD : <br/>";
print_r($array_var);

echo "<br/><br/>";

echo "NEW : <br/>";
print_r($new_array_var);

echo "</pre>";

答案 5 :(得分:0)

$ignore_array = array("address");
$blank_value_keys = array_keys($data,"");
if(sizeof($blank_value_keys)>0 && sizeof(array_diff($ignore_array,$blank_value_keys)>0){
     echo "Empty";
}else{
     echo "NOT Empty";
}

在忽略数组列表中添加要忽略的所有键。 array_keys将返回所有具有空值的键。 接下来,我们检查array_keys返回的数组大小是否大于0,并且$blank_value_keys中的键多于$ignore_array而不是if循环执行。 注意: array_diff将返回第二个数组中可用的所有值,但不会返回第一个