编辑PHP代码以使用strpos查找文件名中是否有Big和Needle1
抱歉,我把标题和问题搞砸了,我相信这两个问题现在都解决了。看起来我在找“或”,而我在找“和” 我在一个文件夹中有几个文件: 这是大针线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”编辑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
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抱歉,我刚刚意识到我把问题搞砸了。(我已编辑)我想找到包含“大”和“针”的文件.我意识到我的措辞要求的是或。我会看看