Php 尝试从变量中筛选出任何包含单词thumb的实例

Php 尝试从变量中筛选出任何包含单词thumb的实例,php,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[$tempv

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

似乎您有一个for循环,可以使用更简单的foreach来代替。你为什么不使用简单的数组过滤器?无论如何,这将使我更容易阅读代码:

<?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。这样,扩展可以是任意长度的,并且总是正确返回。

您考虑过吗?
<?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 );