PHP过滤数组的图像名称和显示缺失的@2x视网膜图像


php filter array of image names and show missing @2x retina images

我在iPad应用程序中有很多图像的文件夹。试图创建一个自动的php脚本来检查,看看是否所有的图像都在文件夹中有配对的非视网膜和视网膜图像集。如果视网膜图像不存在,显示一条消息说:"Missing: $filename"其中$filename是值…我对如何通过glob()抓取的图像数组进行比较:

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

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

现在我想检查这个图像数组,以显示缺失的@2x图像集…我读到你可以使用array_filter,但不太明白如何做到这一点…

有什么想法如何实现这一点,然后用foreach "Missing: $filename"

您可以使用以下命令:

$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";
    }
}

应该这样做:

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]");
}));