有没有办法缩短这个if语句?PHP

有没有办法缩短这个if语句?PHP,php,if-statement,Php,If Statement,我正在努力保持我的代码美观大方。有没有办法把这个if语句缩短 if(strlen($cname) > 100) { } if(strlen($cowner) > 100) { } if(strlen($cemail) > 200) { } if(strlen($cpassword) > 100) { } 我无法执行此操作,因为我要为每个if语句打印特定消息: if(strlen($cname) > 100 || strlen($cowner) >

我正在努力保持我的代码美观大方。有没有办法把这个if语句缩短

if(strlen($cname) > 100) {

} 
if(strlen($cowner) > 100) {

} 
if(strlen($cemail) > 200) {

} 
if(strlen($cpassword) > 100) {

}
我无法执行此操作,因为我要为每个if语句打印特定消息:

if(strlen($cname) > 100 || strlen($cowner) > 100 || strlen($cemail) > 200 || strlen($cpassword) > 100) {
  // I want to print out a message like email is too long not just one of these strings is too long
}

坦白地说,我认为您已经为您正在尝试做的事情找到了最优雅的解决方案。

坦白地说,我认为您已经为您正在尝试做的事情找到了最优雅的解决方案。

您已经在使用优化的代码了。但是,为了显示错误消息,您可以对其进行更多的优化。如下图所示:

$invalidFieldName = '';
$invalidFieldLength = 100;
if (strlen($cname) > 100) {
    $invalidFieldName = 'CNAME';
} elseif (strlen($cowner) > 100) {
    $invalidFieldName = 'COWNER';
} elseif (strlen($cemail) > 200) {
    $invalidFieldName = 'CEMAIL';
    $invalidFieldLength = 200;   
} elseif (strlen($cpassword) > 100) {
    $invalidFieldName = 'CPASSWORD';
}

if ($invalidFieldName != '') {    
    echo $invalidFieldName." should be greater than ".$invalidFieldLength;
}

我不确定它是否能帮助你,但我希望它能帮助你

您已经在使用优化的代码。但是,为了显示错误消息,您可以对其进行更多的优化。如下图所示:

$invalidFieldName = '';
$invalidFieldLength = 100;
if (strlen($cname) > 100) {
    $invalidFieldName = 'CNAME';
} elseif (strlen($cowner) > 100) {
    $invalidFieldName = 'COWNER';
} elseif (strlen($cemail) > 200) {
    $invalidFieldName = 'CEMAIL';
    $invalidFieldLength = 200;   
} elseif (strlen($cpassword) > 100) {
    $invalidFieldName = 'CPASSWORD';
}

if ($invalidFieldName != '') {    
    echo $invalidFieldName." should be greater than ".$invalidFieldLength;
}

我不确定它是否能帮助你,但我希望它能帮助你

可以使用循环来减少行数。这是一个优化的解决方案,即使您有10多个字段要检查:

声明一个字段数组并在其中循环

$fields = array("cname" => 100, "cowner" => 100, "cemail" => 200, "cpassword" => 100); // key as field name and value as maximum limit - new values can be added here.

foreach($fields as $field => $length) {
   if(strlen(${$field}) > $length) {
       die("$field field can only contain $length characters"); 
   }
}
编辑:您还可以将所有错误保留在一个数组中,然后在页面上打印所有错误

$errors = array();
foreach($fields as $field => $length) {
   if(strlen(${$field}) > $length) {
        $errors[] = "$field field can only contain $length characters"; 
   }
}
print_r($errors);

可以使用循环来减少行数。这是一个优化的解决方案,即使您有10多个字段要检查:

声明一个字段数组并在其中循环

$fields = array("cname" => 100, "cowner" => 100, "cemail" => 200, "cpassword" => 100); // key as field name and value as maximum limit - new values can be added here.

foreach($fields as $field => $length) {
   if(strlen(${$field}) > $length) {
       die("$field field can only contain $length characters"); 
   }
}
编辑:您还可以将所有错误保留在一个数组中,然后在页面上打印所有错误

$errors = array();
foreach($fields as $field => $length) {
   if(strlen(${$field}) > $length) {
        $errors[] = "$field field can only contain $length characters"; 
   }
}
print_r($errors);

您希望在什么时候输出消息?您可以循环一个变量数组进行检查,但我认为这并没有什么好处。如果您的目标是针对这些条件中的任何一个打印错误消息,您就不想使用
elseif
。您当前的结构将只显示出现的第一个错误。有很多方法可以验证这些变量,具体取决于它们是如何分配的。我认为你已经找到了最优雅的解决方案来完成你想要完成的任务。如果这是一篇文章,为什么不设置“限制”在前端,如使用
maxlength
?您希望在哪些点输出消息?您可以循环一个变量数组以进行检查,但我认为这并没有任何好处。如果您的目标是针对这些条件中的任何一个打印错误消息,您将不希望使用
elseif
。您当前的结构将只显示出现的第一个错误。有很多方法可以验证这些变量,这取决于它们是如何被分配的。我认为你有最优雅的解决方案。如果这是来自一个帖子,为什么不把前端的“限制”和<代码> Max Simule>代码>?请考虑添加一个正确的答案。在评论部分,这个陈述可能会很好。请考虑添加适当的答案。这句话在评论部分可能会写得很好。