抱歉,我在标题和问题上搞砸了,我相信现在两者都是固定的。看起来我在找“或”,而我在找“和”。
我在一个文件夹中有几个文件:
this-is-big-needle1.jpg
a-big-long-needle1.jpg
this-file-is-needle2.jpg
needle3-is-this-file.jpg
当前的代码&& strpos($file,"needle1")用于搜索一个文件夹,并嵌入所有与strops值(如"needle1“)匹配的文件,并将这些图像包含在AMP HTML旋转木马中。
因此,当前代码搜索"needle1“,并将正确返回前面的2个文件,但忽略其他文件。
我搜索并找到了几种通用的解决方案,用于查找文件名中是否存在needle1或needle2,但是发现没有任何东西是“大”的,"needle1“也在同一个文件名中。
我尝试过添加第二个strops && strpos($file,"needle1")和& strpos($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>';
?>如果有人建议编辑我的代码,以便在同一个文件名中找到"needle1“(返回前两个文件),我们将不胜感激。
==========一个小问题(如果有明显的解决方案)-由于某种原因,在文件名开始时,现有代码将找不到任何文件(如输入值“this”),它将找不到任何文件,或者如果输入needle3,它将找不到任何文件(字符串中的字符串必须在character1之后)。
发布于 2019-09-07 16:19:07
也许你可以替换:
if($file !== '.' && $file !== '..' && strpos($file,"needle1"))通过以下方式:
if($file !== '.' && $file !== '..' && ( strpos($file,"needle1") !== false || strpos($file,"needle2") !== false )这将匹配名称中包含needle1或needle2的所有文件。
请注意我在每个!== false之后添加的strpos()。这有助于你解决你提到的附带问题。如果找不到针,strpos返回false,如果文件名以指针开头,则返回0。它们在if语句上下文中都被计算为false (您可以读取更多的这里 )。
Preg_match alternative
这将是匹配big和needle的另一种很好的方法,无论它们在文件名中的出现顺序如何。
if(preg_match("/(big|needle1)/i", $file) !== 0) {
} 这两者都匹配:this-is-big-needle1.jpg和this-needle1-is-big.jpg,如下所示:正则试验
替代
另一种很好的方法是使用glob()函数:
这样,您只能获得与这些文件名匹配的文件:
foreach (glob("{*needle1*,*needle2*}.*", GLOB_BRACE) as $filename) {
echo $filename."<br />";
}希望这能有所帮助。
发布于 2019-09-07 17:16:55
你遇到的问题是手动引用,
此函数可能返回布尔值FALSE,但也可能返回计算为FALSE的非布尔值。有关更多信息,请阅读有关布尔人的部分。使用===操作符测试此函数的返回值。
-https://www.php.net/manual/en/function.strpos.php
因此,您应该使用!==进行比较。
但是,由于您正在进行模式匹配,所以我将只对preg_match使用正则表达式。
preg_match('/needle[12]/', $file)[]是一个字符类,允许其中列出的所有字符,但有一些例外,是https://www.regular-expressions.info/charclass.html。
https://stackoverflow.com/questions/57835441
复制相似问题