1

这是一个脚本的一部分,它从一个文件夹中抓取所有文件,过滤掉图像文件,然后显示它们。我想在 $names 变量开始按扩展名过滤之前删除包含单词“thumb”的所有实例。

sort($names);


$tempvar=0;
for ($i=0;$names[$i];$i++){
$ext=strtolower(substr($names[$i],-4));
if ($ext==".jpg"||$ext==".gif"||$ext=="jpeg"||$ext==".png"){$names1[$tempvar]=$names[$i];$tempvar++;}
}
4

2 回答 2

0

似乎您有一个 for 循环,您可以在其中使用(更简单的)foreach 代替。有什么理由不使用简单的array_filter?这将使代码更易于阅读(无论如何对我来说):

<?php
$names = array(
    'foo.thumb.jpg',
    'bar.jpg',
    'bar.THUMB.jpg',
    'qux.png',
    'README.TXT'
);

$extensions = array( 'jpg', 'gif', 'jpeg', 'png' );

$filtered = array_filter( $names, function( $name ) use ( $extensions ) {
    if( stripos( $name, 'thumb' ) !== false ) {
        return false;
    }
    return in_array( pathinfo( $name, PATHINFO_EXTENSION ), $extensions );
});

var_dump( $filtered );

另外,substr($names[$i], -4 )我选择使用 pathinfo,而不是 。这样,扩展名可以是任意长度,并且总是能正确返回。

于 2012-12-04T11:37:07.963 回答
0
$tempvar=0;
for ($i=0;$names[$i];$i++){

  if(strpos($names[$i], 'thumb') === false){

    $ext=strtolower(substr($names[$i],-4));
    if ($ext==".jpg"||$ext==".gif"||$ext=="jpeg"||$ext==".png"){ 
        $names1[$tempvar]=$names[$i];$tempvar++;}
    }
  }
}
于 2012-12-04T11:25:07.327 回答