首先返回False还是True之间有什么区别?

Yve*_*omb 3 php regex function return-value

我有以下功能.
我可以运行它来测试是否为true,否则为false,反之亦然,如图所示.

    $fname=$_POST['fname'];
    $lname=$_POST['lname'];

function namecheck ($fname,$lname) 
{    
    $names= array ($fname,$lname);

    $regexp ="/^[A-Za-z]+$/";

    //filter through names 
    for ($i=0; $i<2; $i++)
    if (! preg_match($regexp, $names[$i])) 
    {
         return false;
    }
    return true;
}
Run Code Online (Sandbox Code Playgroud)

(替代版本):

for ($i=0; $i<2; $i++)
if (preg_match($regexp, $names[$i])) 
{
    return true;
}
return false;
Run Code Online (Sandbox Code Playgroud)

在效率和良好的编码实践方面,哪种方式更好?或者没有区别?

对于像这样的小阵列来说,它可能不是一个问题,但我想知道它会对更大更复杂的程序产生什么影响.

Roh*_*ain 9

不同之处在于两个循环都在检查不同的结果.

  • 1. 第一循环检查是否$regexp匹配的数组中的所有元素-在这种情况下,它返回false只要匹配失败,如果for循环到达后return语句,这意味着所有的元素匹配.
    说实话,没有围绕for循环的大括号通常会让人感到困惑(就像它先把我弄糊涂了).我建议添加相关的括号:

    for ($i=0; $i<2; $i++) {
        if (preg_match($regexp, $names[$i])) {
             return true;
        }
    }
    return false;
    
    Run Code Online (Sandbox Code Playgroud)
  • 的2 循环检查是否$regexp匹配所述阵列的任何元件-在这种情况下,它返回true只要一个匹配成功,并且如果for循环到达后返回语句,这意味着没有一个元素匹配的.

    for ($i=0; $i<2; $i++) {
        if (! preg_match($regexp, $names[$i])) {
             return false;
        }
    }
    return true;
    
    Run Code Online (Sandbox Code Playgroud)