尝试从变量中过滤掉包含单词thumb的任何实例

时间:2012-12-04 09:06:43

标签: php

这是一个脚本的一部分,它抓取文件夹中的所有文件,过滤掉图像文件,然后显示它们。我想删除$ 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++;}
}

2 个答案:

答案 0 :(得分: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++;}
    }
  }
}

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

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