我搜索了一下,发现了一些类似的问题,但没有一个真正帮助我(因为我的PHP能力不足以弄清楚)。我认为我的问题将足够简单,因为我发现的类似问题已经用一两行代码解决了。所以,来了!
我有一些代码可以搜索给定目录的内容,并在数组中提供文件。此特定目录只有.JPG图像文件,命名如下:
镜头01.jpgShot01_tn.jpg
等等等等。我的数组为我提供了文件名,这样我就可以直接在标记中使用结果,以显示在我正在构建的站点上。但是,我遇到了一点麻烦,因为我想将我的数组限制为在包含"_tn"时不返回项目,因此我可以使用链接到全尺寸图像的缩略图。我曾想过没有缩略图并调整图像大小以使PHP更容易做,但这感觉就像放弃了我。那么,有谁知道我该怎么做?这是我目前拥有的代码:
$path = 'featured/';
$newest = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path, RecursiveDirectoryIterator::SKIP_DOTS));
$array = iterator_to_array($newest);
foreach($array as $fileObject):
$filelist = str_replace("_tn", "", $fileObject->getPathname());
echo $filelist . "<br>";
endforeach;
我试图使用 str_replace(),但现在我意识到我完全错了。这将返回我的数组,如下所示:
Array
(
[0] => featured/Shot01.jpg
[1] => featured/Shot01.jpg
[2] => featured/Shot02.jpg
[3] => featured/Shot02.jpg
[4] => featured/Shot03.jpg
[5] => featured/Shot03.jpg
)
我目前只有 3 张图像(带有缩略图),但我会有更多,所以我也想将数组的结果限制为随机 3 个结果。但是,如果这要求太多,我相信我可以自己弄清楚这部分。
所以没有混淆,如果项目包含"_tn",我想从数组中完全删除它们,所以我的数组看起来像这样:
Array
(
[0] => featured/Shot01.jpg
[2] => featured/Shot02.jpg
[4] => featured/Shot03.jpg
)
感谢任何可以提供帮助的人!
<?php
function filtertn($var)
{
return(!strpos($var,'_tn'));
}
$array = Array(
[0] => featured/Shot01.jpg
[1] => featured/Shot01_tn.jpg
[2] => featured/Shot02.jpg
[3] => featured/Shot02_tn.jpg
[4] => featured/Shot03.jpg
[5] => featured/Shot03_tn.jpg
);
$filesarray=array_filter($array, "filtertn");
print_r($filesarray);
?>
只需使用stripos()
函数来检查文件名是否包含_tn
字符串。如果没有,请添加到数组中。
Use this
<?php
$array = Array(
[0] => featured/Shot01.jpg
[1] => featured/Shot01_tn.jpg
[2] => featured/Shot02.jpg
[3] => featured/Shot02_tn.jpg
[4] => featured/Shot03.jpg
[5] => featured/Shot03_tn.jpg
)
foreach($array as $k=>$filename):
if(strpos($filename,"_tn")){
unset($array[$k]);
}
endforeach;
Prnt_r($array);
//OutPut will be you new array removed all name related _tn files
$array = Array(
[0] => featured/Shot01.jpg
[2] => featured/Shot02.jpg
[4] => featured/Shot03.jpg
)
?>
我不明白问题出在哪里?是否需要将"_tn"添加到数组中?只需检查"_tn"是否存在,不要将此元素添加到结果数组中。
尝试 strpos() 以了解文件名是否包含字符串"_tn".. 如果没有,则将文件名添加到数组中
$path = 'featured/';
$newest = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path, RecursiveDirectoryIterator::SKIP_DOTS));
$array = iterator_to_array($newest);
$filesarray = array();
foreach($array as $fileObject):
// Check - string contains "_tn" substring or not
if(!strpos($fileObject->getPathname(), "_tn")){
// Check - value already exists in array or not
if(!in_array($fileObject->getPathname(), $filesarray)){
$filesarray[] = $fileObject->getPathname();
}
}
endforeach;
print_r($filesarray);