php过滤图像名称数组并显示丢失的@ 2x视网膜图像

时间:2013-05-08 12:16:32

标签: php arrays glob

我在iPad应用中有很多图像的文件夹。尝试创建一个自动PHP脚本,以检查文件夹中的所有图像是否具有配对的非视网膜和视网膜图像集。如果视网膜图像不存在,则显示一条消息,上面写着:“缺少:$ filename”,其中$ filename是值...我对如何对通过glob抓取的图像数组进行比较表示不满( ):

首先我从文件夹中获取jpg或png的图像:

$images = glob("ipad/{*.jpg,*.png}", GLOB_BRACE);

现在我想查看这个图像数组来显示丢失的@ 2x图像集......我正在读你可以使用array_filter但是我不知道怎么做...

任何想法如何实现这一点,然后用foreach“Missing:$ filename”回显它们

2 个答案:

答案 0 :(得分:1)

您可以使用以下内容:

$path = __DIR__;
$all = glob("$path/*.{jpg,png}", GLOB_BRACE);

$normal = $retina = array();

// Group Images
foreach($all as $v) {
    strpos($v, '@2x') === false and $normal[basename($v)] = $v;
    strpos($v, '@2x') !== false and $retina[basename($v)] = $v;
}

foreach($normal as $image) {
    $v = pathinfo($image);
    $name = $v['filename'] . '@2x.' . $v['extension'];
    if (! isset($retina[$name])) {
        echo "Missing: $name\n";
    }
}

答案 1 :(得分:0)

这样的事情应该做:

var_dump(array_filter(glob('ipad/{*.jpg,*.png}', GLOB_BRACE), function ($file) {
    $info = pathinfo($file);
    return !preg_match('/@2x$/', $info['filename'])
        && !file_exists("$info[dirname]/$info[filename]@2x.$info[extension]");
}));