首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >stripos与glob的解连

stripos与glob的解连
EN

Stack Overflow用户
提问于 2018-10-03 07:54:34
回答 1查看 48关注 0票数 1

我想删除没有出现在这个数组中的文件。我部分地知道文件名,但不知道像filename-50x75.jpg, filename-100x77.jpg , filename-500x377.jpg这样的文件名后缀的大小参数。

我想从目录中删除上面的图像,而不想删除下面的图像。

代码语言:javascript
复制
$list_of_allowed_images=array("filename-50x50.jpg","filename-50x70.jpg","filename-90x50.jpg","filename-100x100.jpg","filename-150x150.jpg","filename-250x200.jpg","filename-300x250.jpg","filename-360x270.jpg","filename-390x250.jpg","filename-500x345.jpg","filename-768x576.jpg","filename-820x400.jpg","filename-1024x768.jpg");

我有以下片段:

代码语言:javascript
复制
foreach(glob($base_path_del.$only_obs_img."[0-9][0-9]*x*.{jpg,gif,png}", GLOB_BRACE) as $file_to_del_now)
{ 
  if(!in_array($file_to_del_now,$list_of_allowed_images))
  {
    unlink($file_to_del_now);       

   }            
} 

但我认为它可以更有效率。是另一种更有效的方法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-03 13:00:21

以下是我的建议:

(未经测试的代码)

代码语言:javascript
复制
chdir($base_path_del);
$files = glob($only_obs_img."[0-9][0-9]*x*.{jpg,gif,png}", GLOB_BRACE);
$whitelist_regex = "/-(?:50x[57]0|90x50|100x100|150x150|250x200|300x250|360x270|390x250|500x345|768x576|820x400|1024x768)\.jpg$/i";
$removables = preg_grep($whitelist_regex, $files, PREG_GREP_INVERT);
foreach ($removables as $filename) {
    unlink($filename);       
}

所以..。

更改当前的工作目录,以便glob()不包括限定文件集合中的路径。

反转preg_grep(),以便保留不符合白名单regex要求的文件。

然后循环调皮列表并删除该批。

regex模式简化了您的白名单数组逻辑。检查从文件名中的最后一个-开始,检查维度,不敏感地检查.jpg大小写,然后确保文件名已经结束。

附注:如果不想破坏功能样式,也可以使用array_map()

代码语言:javascript
复制
array_map('unlink', $removables);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52622315

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档