如何在PHP中检查所有变量不为空

3

我需要检查所有变量是否为空,我使用以下方式。

if(empty($first_name) || 
   empty($last_name) || 
   empty($email) || 
   empty($password) || 
   empty($contact_no) || 
   empty($cnic)) {
    echo json_encode(array('condition' => 'error','data' => 'Please fill all inputs')); 
    exit;
}

以上代码可以正常工作,但看起来有点奇怪。是否有更简短或更专业的方式来检查所有输入?谢谢。


使用数组、计数、过滤和计数。你不想检查是否“全部”为空,只想检查是否“任何一个”为空,否则你会使用“and”而不是“or”。 - ArtisticPhoenix
你可以创建一个自己的输入验证器类,例如使用策略设计模式。我认为这将是一种更专业的方式。 - István Döbrentei
3个回答

4

像这样:

$array = [
   'first_name' =>  'John',
    'last_name' => 'Doe',
    'email' => '',
];

if(count($array) != count(array_filter($array))){
    echo 'some rows are empty';
}

如果您想知道哪些特定字段为空,可以使用array_diff_key

$array = [
   'first_name' =>  'John',
    'last_name' => 'Doe',
    'email' => '',
];

$filled = array_filter($array);

if(count($array) != count($filled)){
    $empty = array_diff_key($array, $filled);
    echo 'field(s) '.implode(', ', array_keys($empty)).' are empty';
}

输出:

field(s) email are empty

显然,您可以改进错误字符串或其他内容。因此,在您的情况下,我会这样做:

if(count($array) != count($filled)){
    $empty = array_keys(array_diff_key($array, $filled));
    $last = '';
    if(count($empty) > 1 ){
       $last = ' and '.array_pop($empty);
    }
    $fields = implode(', ', $empty).$last; 
    echo json_encode(array('condition' => 'error','data' => 'Please fill in '.$fields));
}

因此,它应该输出类似于这样的内容:
Please fill in email

Please fill in first_name and email

Please fill in first_name, last_name and email

你甚至可以这样做:

$empty = array_map(function($item){
   return ucwords(str_replace('_', ' ', $item));
}, $empty);

如果你想更加高级一些,可以将first_name转换为First Name

所以... 将所有这些放在一起:

$array = [
   'first_name' =>  '',
    'last_name' => '',
    'email' => '',
];

$filled = array_filter($array);

if(count($array) != count($filled)){
    $empty = array_map(function($item){
        return ucwords(str_replace('_', ' ', $item));
    },array_keys(array_diff_key($array, $filled)));
    $last = '';
    if(count($empty) > 1 ){
       $last = " and '".array_pop($empty)."'";
    }
    $fields = "'".implode("', '", $empty)."'".$last; 
    echo json_encode(['condition' => 'error','data' => 'Please fill in '.$fields]);
}

输出:

{"condition":"error","data":"Please fill in 'First Name', 'Last Name' and 'Email'"}

您可以在此处实时查看:链接

现在它会准确告诉他们需要哪些字段,而不是一般性的错误提示。


当然,没问题。 - ArtisticPhoenix
很不幸,这似乎不能与$_POST数组一起使用。 - Finlay Roelofs
不,你需要将帖子复制到数组中,例如 $array = $_POST,然后从那里开始。 $_POST 是一个超级全局变量,可能有一些特殊的考虑。 - ArtisticPhoenix

0

你可以使用数组来实现这个目的,或者你可以在相同的代码上采用另一种方法,如下所示。

if($first_name || $last_name || $email || $password || $contact_no || $cnic){
echo json_encode(array('condition' => 'error','data' => 'Please fill all inputs'));    
exit; }

这将起作用,因为它与检查变量为空相同。但如果变量未定义,则会失败


不同的是,$first_name 可能会抛出未定义变量的警告,而 empty($first_name) 不会发出该警告。但除此之外,它们基本上是相同的。 - ArtisticPhoenix

0

isset() 函数

isset() 函数用于检查变量是否已设置。如果使用 unset() 函数取消了变量的设置,则它将不再被设置。如果测试变量包含 NULL 值,则 isset() 函数返回 false。

版本:(PHP 4 及以上)

语法:

isset(variable1, variable2......) 

在我看来,我们可以这样做

if(isset($first_name,$last_name,$email,$password,$contact_no,$cnic) { 
   // true conditon
} else {
   // false condition 
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接