PHP - 从具有给定参数的数组中删除项目


PHP - Remove items from an array with given parameter

我搜索了一下,发现了一些类似的问题,但没有一个真正帮助我(因为我的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);