我完全难过了。我有一个数组,其中包含我网站上目录中的所有文件。我在if
循环中使用foreach
语句来过滤结果。如果文件名以三个字母("wwa" or "wea" or "swa" or "hta" or "cta" or "twa" or "fra")
的特定组合开头,则该文件名将分配给$alert_string
。
由于某种原因,所有文件都在if语句中返回true
,因此每次都会简单地覆盖该变量,并为扫描的最后一个文件分配变量。
代码:
$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语句中返回true。那么为什么每个文件都返回true并且如何解决这个问题?
答案 0 :(得分:1)
("wwa" or "wea" or "swa" or "hta" or "cta" or "twa" or "fra")
产生一个布尔值TRUE。只要substr($values, 0, 3)
返回某些内容,您的条件表达式将始终为TRUE。
您无法在不了解运营商实际工作方式的情况下编写看起来像英语有意义的代码。当所有其他方法都失败时,echo
中间结果,这样您就可以了解您的计划正在做什么。
答案 1 :(得分:1)
你的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;
}
}
答案 2 :(得分:0)
您可以使用函数在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;
}
}