dir语言 - content到数组 - 排除具有特定模式的文件



我想在特定目录中收集所有文件(目前我使用的是Scandir) - 但是只有那些没有特殊模式的人。

示例:

someimage.png
someimage-150x150.png
someimage-233x333.png
someotherimage.png
someotherimage-760x543.png
someotherimage-150x50.png

在这种情况下,我想获得一些图像。

如何解决此问题?

要获取仅由字母组成的文件名数组,您可以使用以下方式:

$array = array();
$handle = opendir($directory);
while ($file = readdir($handle)) {
    if(preg_match('/^[A-Za-z]+.png$/',$file)){
      $array[] = $file;
   }
}

OOP方法可能是将目录的标准器与filteriterator结合使用:

class FilenameFilter extends FilterIterator {
    protected $filePattern;
    public function __construct(Iterator $iterator , $pattern) {
        parent::__construct($iterator);
        $this->filePattern = $pattern;
    }
    public function accept() {
        $currentFile = $this->current();
        return (1 === preg_match($this->filePattern, $currentFile));
    }
}

用法:

$myFilter = new FilenameFilter(new DirectoryIterator('path/to/your/files'), '/^[a-z-_]*.(png|PNG|jpg|JPG)$/i');
foreach ($myFilter as $filteredFile) {
    // Only files which match your specified pattern should appear here
    var_dump($filteredFile);
}

这只是一个想法,代码没有测试,但是。希望有帮助;

    $files = array(
        "someimage.png",
        "someimage-150x150.png",
        "someimage-233x333.png",
        "someotherimage.png",
        "someotherimage-760x543.png",
        "someotherimage-150x50.png",
    );
    foreach ( $files as $key => $value ) {
        if ( preg_match( '@-[0-9]+x[0-9]+.(png|jpe?g|gif)$@', $value ) ) {
            unset( $files[$key] );
        }
    }
    echo '<xmp>' . print_r( $files, 1 ) . '</xmp>';

此正则将$correctFiles填充所有不包含尺寸的PNG图像(例如42x42)。

<?php
// here you get the files with scandir, or any method you want
$files = array(
    'someimage.png',
    'someimage-150x150.png',
    'someimage-233x333.png',
    'someotherimage.png',
    'someotherimage-760x543.png',
    'someotherimage-150x50.png'
);
$correctFiles = array(); // This will contain the correct file names
foreach ($files as $file)
    if (!preg_match('/^.*-d+xd+.png$/', $file)) // If the file doesn't have "NUMBERxNUMBER" in their name
        $correctFiles[] = $file;
print_r($correctFiles); // Here you can do what you want with those files

如果您不想将名称存储在数组(更快,更少的内存消耗)中,则可以使用以下代码。

<?php
// here you get the files with scandir, or any method you want
$files = array(
    'someimage.png',
    'someimage-150x150.png',
    'someimage-233x333.png',
    'someotherimage.png',
    'someotherimage-760x543.png',
    'someotherimage-150x50.png'
);
foreach ($files as $file)
    if (!preg_match('/^.*-d+xd+.png$/', $file)) // If the file doesn't have "NUMBERxNUMBER" in their name
    {
        print_r($file); // Here you can do what you want with this file
    }

最新更新