如何使用in_array异常检查空值


How to check for empty values with in_array WITH EXCEPTIONS?

我试图弄清楚如何在某些例外的情况下检查数组的空值。这是数组:

[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'; 
  }

它将在[address]时返回false,并且[name_last]empty。如何忽略特定键(假设 - [address](?基本上它应该看起来像这样:

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

试试这个:

$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";
}
$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将取消设置其中指定的键。

将根据找到的匹配项返回布尔值,如果需要键,只需使用 array_search 更改in_array即可。

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

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

您还可以通过编写将处理键异常的自定义函数来忽略键,这样,如果您以后要调整,您可以更好地控制:

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

尝试使用如下所示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>";
$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 是否执行循环。注意: array_diff将返回第二个数组中所有可用的值,但不返回第一个数组中可用的值