PHP - 使用给定参数从数组中删除项目

时间:2013-09-19 06:19:15

标签: php arrays

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

感谢任何可以提供帮助的人!

5 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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);
?>

答案 2 :(得分: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); 

答案 3 :(得分: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
          )

?>

答案 4 :(得分:0)

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