【问题标题】:php filter array of image names and show missing @2x retina imagesphp 过滤图像名称数组并显示缺少的@2x 视网膜图像
【发布时间】:2013-05-08 12:16:32
【问题描述】:

我在 iPad 应用中有一个包含很多图像的文件夹。尝试创建一个自动化的 php 脚本来检查文件夹中的所有图像是否具有配对的非视网膜和视网膜图像集。如果视网膜图像不存在,则显示一条消息,内容如下:“Missing: $filename”,其中 $filename 是值...我不知道如何比较通过 glob 抓取的图像数组( ):

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

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

现在我想检查这个图像数组以显示丢失的@2x 图像集...我读到您可以使用 array_filter 但不太了解如何执行此操作...

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

【问题讨论】:

  • 配对,您的意思是您为这对的两个图像指定了一致的名称(例如myimg.jpgmyimg-retina. jpg),或者您想查找一个图像是否是另一个图像的副本更大的尺寸,无论图像的名称是什么?
  • 嗯,基本上是查找 image.png 并查看是否有对应的 image@2x.png...如果 2x 版本不存在,则显示需要 2x 版本的文件的名称。跨度>

标签: php arrays glob


【解决方案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";
    }
}

【讨论】:

  • 这会产生解析错误:语法错误,意外的 T_FUNCTION 知道为什么吗?在 $normal = ... 代码行
  • 你用的是什么版本的PHP?
  • 这就是原因... PHP 5.2.17 不支持闭包.. 已更新代码.. 但请更新您的PHP版本
【解决方案2】:

应该这样做:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多