Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
编辑PHP代码以使用strpos查找文件名中是否有Big和Needle1_Php - Fatal编程技术网

编辑PHP代码以使用strpos查找文件名中是否有Big和Needle1

编辑PHP代码以使用strpos查找文件名中是否有Big和Needle1,php,Php,抱歉,我把标题和问题搞砸了,我相信这两个问题现在都解决了。看起来我在找“或”,而我在找“和” 我在一个文件夹中有几个文件: 这是大针线1.jpg a-big-long-needle 1.jpg this-file-is-needle2.jpg needle3-is-this-file.jpg 当前代码和&strpos($file,“needle1”)用于搜索文件夹,并包含与strops值匹配的所有文件,例如“needle1”,并将这些图像包含在AMP HTML旋转木马中 因此,当前代码搜索“ne

抱歉,我把标题和问题搞砸了,我相信这两个问题现在都解决了。看起来我在找“或”,而我在找“和”

我在一个文件夹中有几个文件:

这是大针线1.jpg

a-big-long-needle 1.jpg

this-file-is-needle2.jpg

needle3-is-this-file.jpg

当前代码和&strpos($file,“needle1”)用于搜索文件夹,并包含与strops值匹配的所有文件,例如“needle1”,并将这些图像包含在AMP HTML旋转木马中

因此,当前代码搜索“needle1”,并将正确返回上面的前2个文件,但忽略其他文件

我已经搜索并找到了几种通用的解决方案来查找文件名中是否存在needle1或needle2,但没有发现在同一文件名中同时存在“big”和“needle1”

if(preg_match("/(big|needle1)/i", $file) !== 0) {

} 
我曾尝试添加第二个strops&&strops($file,“needle1”)&&strops($file,“big”),但我的php技能非常缺乏,因此很容易被语法绊倒,并将其放入例如“…”等

php
$Count5Image5 = 0;
$Image5;
$handle = opendir(dirname(realpath(__FILE__)).'/images/');
while($file = readdir($handle)){

    if($file !== '.' && $file !== '..' && strpos($file,"needle1")) 
{
        Image5[$Count5Image5] = $file;
        $Count5Image5++;
    }
}
sort($Image5);
for($i=0; $i<$Count5Image5; $i++)
  echo '<amp-img src="images/'.$Image5[$i].'" class="xs-12" width="353" height="210" layout="responsive"></amp-img>';
?>
php
$Count5Image5=0;
$5;
$handle=opendir(dirname(realpath(_文件))。/images/);
而($file=readdir($handle)){
如果($file!='.&&$file!='..'&&strpos($file,“1”))
{
Image5[$Count5Image5]=$file;
$Count5Image5++;
}
}
排序(5美元);
对于($i=0;$i)
如果有人能建议编辑我的代码,在同一个文件名中找到“big”和“needle1”(返回前两个文件),我们将不胜感激

========== 一个小问题(如果有一个明显的解决方案)-由于某种原因,如果strops值位于文件名的开头,现有代码将找不到任何文件,例如,如果我输入值“this-”,它将找不到任何文件,或者如果我输入needle3,它将找不到任何文件(字符串中的字符1后面必须是字符串)

也许您可以替换:

if($file !== '.' && $file !== '..' && strpos($file,"needle1"))
与:

这将匹配名称中包含needle1或needle2的所有文件

请注意我在每个
strpos()之后添加的
!==false
。这有助于解决您提到的次要问题。如果未找到指针,strpos将返回
false
,如果文件名以指针开头,则返回
0
。它们在
if
语句上下文中都将计算为false(您可以阅读更多)

预匹配备选方案

这将是另一种很好的匹配
big
needle
的方法,无论它们在文件名中的显示顺序如何

if(preg_match("/(big|needle1)/i", $file) !== 0) {

} 
这将同时匹配:
This-is-big-needle1.jpg
This-needle1-is-big.jpg
,如下所示:

备选方案

另一个很好的方法是使用函数:

这样,您只能获得与这些文件名匹配的文件:

foreach (glob("{*needle1*,*needle2*}.*", GLOB_BRACE) as $filename) {
    echo $filename."<br />";
}
foreach(glob(“{*needle1*,*needle2*}.*”,glob_BRACE)作为$filename){
echo$filename。“
”; }
希望有帮助。

也许您可以替换:

if($file !== '.' && $file !== '..' && strpos($file,"needle1"))
与:

这将匹配名称中包含needle1或needle2的所有文件

请注意我在每个
strpos()之后添加的
!==false
。这有助于解决您提到的次要问题。如果未找到指针,strpos将返回
false
,如果文件名以指针开头,则返回
0
。它们在
if
语句上下文中都将计算为false(您可以阅读更多)

预匹配备选方案

这将是另一种很好的匹配
big
needle
的方法,无论它们在文件名中的显示顺序如何

if(preg_match("/(big|needle1)/i", $file) !== 0) {

} 
这将同时匹配:
This-is-big-needle1.jpg
This-needle1-is-big.jpg
,如下所示:

备选方案

另一个很好的方法是使用函数:

这样,您只能获得与这些文件名匹配的文件:

foreach (glob("{*needle1*,*needle2*}.*", GLOB_BRACE) as $filename) {
    echo $filename."<br />";
}
foreach(glob(“{*needle1*,*needle2*}.*”,glob_BRACE)作为$filename){
echo$filename。“
”; }

希望能有所帮助。

您遇到的问题是手册参考的问题

此函数可能返回布尔值FALSE,但也可能返回计算结果为FALSE的非布尔值。有关详细信息,请阅读布尔值部分。使用===运算符测试此函数的返回值

-

因此,您应该使用
!==
进行比较

因为您正在进行模式匹配,所以我只使用带有
preg\u match
的正则表达式

preg_match('/needle[12]/', $file)

[]
是一个字符类,允许在其中列出所有字符,但有一些例外。

您遇到的问题是手册引用的问题

此函数可能返回布尔值FALSE,但也可能返回计算结果为FALSE的非布尔值。有关详细信息,请阅读布尔值部分。使用===运算符测试此函数的返回值

-

因此,您应该使用
!==
进行比较

因为您正在进行模式匹配,所以我只使用带有
preg\u match
的正则表达式

preg_match('/needle[12]/', $file)

[]
是一个字符类,允许其中列出的所有字符,但有一些例外。

可以读取-您需要检查
strpos()
如果找不到,则返回。如果该问题有帮助,我看不出有什么帮助。要么不相关,要么我缺乏编码技能。@ColinK它确实有助于解决您提到的次要问题。请阅读-您需要检查什么
strpos()
如果找不到,则返回。如果该问题有帮助,我看不出有什么帮助。要么不相关,要么我缺乏编码技能。@ColinK它确实有助于解决您提到的次要问题。Cornel.raiu抱歉,我刚刚意识到我把问题搞砸了。(我已编辑)我想找到包含“大”和“针”的文件.我意识到我的措辞要求的是或。我会看看