我已经搜索了很长一段时间了,我无法弄清楚为什么我的代码无法正常工作。我不确定我是否有块或任何东西,但是这里:
$start = 1;
$sstart = strval($start);
$scan = scandir('upload');
$result = null;
while($result==null)
{
foreach($scan as $value)
{
if(strpos($value,$start) == false)
{
$result = $start;
break 2;
}
else
{
$start = $start + 1;
break;
}
}
}
基本上,我想扫描我的目录'upload'
,查找$start
中保存号码的所有文件。如果未找到此值,则$result
将取$start
的值,while()
循环结束。否则我会增加$start
并继续检查目录中的每个文件。
现在我有一个非常类似的功能,在另一个页面上运行,运行完美。然而,这似乎总是停在1。
我的上传文件夹中有一个名为showreel1.wmv
的文件,它肯定会对此进行扫描。 (已经回应了scandir数组)然而,它似乎永远不会切换到else
块,而是继续设置$result
,好像它从未找到值'1'。
我也尝试在$sstart
函数中使用strpos()
并且它没有效果,这当然会将$start
的值更改为字符串。
请问你能为我解释一下吗?
答案 0 :(得分:1)
strpos返回0
此行将返回误报(即,即使它实际上以字符串开头,它也会告诉您它不包含字符串)
if(strpos($value,$start) == false)
您需要使用===
运算符来匹配错误的
if(strpos($value,$start) === false)
答案 1 :(得分:1)
我希望我理解你要做的事情,试试这个:
while($result === null)
{
$found = false;
foreach($scan as $value)
{
if(strpos($value,$start) !== false)
{
$found = true;
$start = $start + 1;
break;
}
}
if(!$found)
{
$result = $start;
break;
}
}
顺便说一下,您应该学习如何使用===
运算符,正确使用strpos()
答案 2 :(得分:0)
您也可以使用RecursiveDirectoryIterator代替scandir。你可以跳过。而且......更容易,你也会得到基道,子路径等。虽然这不是你的问题,但它可能会减轻你的发展。
答案 3 :(得分:0)
您总是打破foreach语句,因此您只检查目录中的第一个文件。我想目录中的firstfile有一个带有数字的名字,否则它将是一个永恒的循环。
while($result==null)
{
foreach($scan as $value)
{
if(strpos($value,$start) == false)
{
$result = $start;
break 2; //end the while loop
}
else
{
$start = $start + 1;
break; //end the foreach, but result = null so start with a new foreach
}
}
}
我想你想找到不在任何档案中的最低号码。在那种情况下,我会使用
$start = 0; //start with zero because I increase it before the check
$result = null;
while($result==null)
{
$start++;
$found = false;
foreach($scan as $value)
{
if(strpos($value,$start) !== false) {
$found = true;
break; //end the foreach
}
}
if (!$found)
$result = $start;
}