PHP'nin glob (), bir harf duyarsız bir şekilde dosyaları bulmak için yapılabilir mi?

4 Cevap php

Ben bir dizindeki tüm CSV dosyalarını istiyorum, ben kullanmak

glob('my/dir/*.CSV')

Bu ancak küçük CSV uzantılı dosyaları bulmak değildir.

I could Kullanım

glob('my/dir/*.{CSV,csv}', GLOB_BRACE);

Ama bütün karışık durumda sürümleri sağlamak için bir yol var mı? Ya da bu sadece bir sınırlama glob()?

4 Cevap

Glob desenler karakter aralıklarını destekler:

glob('my/dir/*.[cC][sS][vV]')

Bunu yapabilirdi

$files = glob('my/dir/*');

$csvFiles =  preg_grep('/\.csv$/i', $files);

glob('my/dir/*.[cC][sS][vV]') bunu yapmalıdır. Evet bu tür çirkin.

Kendi harf duyarsız topak yazabilirsiniz. Bu benim yazmak bir kişisel web kütüphaneden olduğunu:

/** PHP has no case insensitive globbing
 * so we have to build our own.
 *
 * $base will be the initial part of the path which doesn't need case insensitive
 * globbing.
 * Suffix is similar - it will not be made insensitive
 * Make good use of $base and $suffix to keep $pat simple and fast in use.
 */
    function ciGlob($pat, $base = '', $suffix = '')
    {
        $p = $base;
        for($x=0; $x<strlen($pat); $x++)
        {
            $c = substr($pat, $x, 1);
            if( preg_match("/[^A-Za-z]/", $c) )
            {
                $p .= $c;
                continue;
            }
            $a = strtolower($c);
            $b = strtoupper($c);
            $p .= "[{$a}{$b}]";
        }
        $p .= $suffix;
        return glob($p);
    }