2

我四处搜索,发现有人问了一些类似的问题,但没有一个能真正帮助我(因为我的 PHP 能力还不足以解决这个问题)。我认为我的问题很简单,可以回答,因为我发现的类似问题可以用一两行代码解决。所以,来了!

我有一些代码可以搜索给定目录的内容,并以数组的形式提供文件。这个特定目录只有 .JPG 图像文件,名称如下:

Shot01.jpg Shot01_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
)

感谢任何能提供帮助的人!

4

5 回答 5

1

只需使用stripos()函数来检查文件名是否包含_tn字符串。如果没有,添加到数组中。

于 2013-09-19T06:22:02.340 回答
1
<?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);
?>
于 2013-09-19T06:49:36.980 回答
0

尝试 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); 
于 2013-09-19T06:29:57.917 回答
0
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
          )

?>
于 2013-09-19T06:30:52.150 回答
0

我不明白有什么问题?是否需要将“_tn”添加到数组中?只需检查“_tn”是否存在,不要将此元素添加到结果数组中。

于 2013-09-19T06:31:28.337 回答