PHP returns 所有通过 if 语句 运行 的文件都为真

PHP returns true for all files that are run thru if statement

我完全被难住了。我有一个数组将所有文件保存在我网站上的一个目录中。我在 foreach 循环中使用 if 语句来过滤结果。如果文件名以三个字母的特定组合 ("wwa" or "wea" or "swa" or "hta" or "cta" or "twa" or "fra") 开头,则该文件名将分配给 $alert_string.

出于某种原因,所有文件 return true 都在 if 语句中,因此每次都会简单地覆盖该变量,并为最后扫描的文件分配该变量。

代码:

   $alert_files = scandir("/home/prww/public_html/blog/");

   foreach ($alert_files as $values) {
        if ((substr($values, 0, 3)) == ("wwa" or "wea" or "swa" or "hta" or "cta" or "twa" or "fra")) {
            $alert_string = $values;
        }
    }

目录中的文件:

显然,只有以 "hta" 开头的文件在 if 语句中应该 return 为真。那么为什么每个文件 return 都是真的,我该如何解决这个问题?

("wwa" or "wea" or "swa" or "hta" or "cta" or "twa" or "fra")

产生布尔值 TRUE。只要 substr($values, 0, 3) returns 东西,你的条件表达式就永远是 TRUE。

如果不了解运算符的实际工作原理,就无法用英语编写看起来有意义的代码。当所有其他方法都失败时,echo 中间结果让您可以了解您的程序在做什么。

您的 if 语法错误。 您可以使用数组简化逻辑:

//array of allowed substrings, used as index for quicker lookup
$substringKeys = array_flip(["wwa","wea","swa","hta","cta","twa","fra"]);

$alert_string='';

$alert_files = scandir("/home/prww/public_html/blog/");

foreach ($alert_files as $filename) {
    $substr = substr($filename, 0, 3);
    if (isset($substringkeys[$substr])) {
        //add to, not overwrite, $alert_string
        $alert_string .= $values;
    }
}

您可以在 array_map

的帮助下使用函数实现此目的
$alert_files = scandir("/home/prww/public_html/blog/");

$fileNames = array_filter(array_map("checkName",$alert_files));
print_r($fileNames);

function checkName($fileName)
{
    $file = substr($fileName,0,3);
    $conditionArray = array("wwa","wea","swa","hta","cta","twa","fra");
    if(in_array($file,$conditionArray))
    {
        return $fileName;
    }
}