首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从php的两级路径中获取所有zip文件

从php的两级路径中获取所有zip文件
EN

Stack Overflow用户
提问于 2013-04-25 05:17:04
回答 3查看 1.1K关注 0票数 2

我想从我的两级路径中获得所有的*.zip文件,我做了两个while循环和foreach循环。我总是遇到类似"array_filter() first .array-filter:第一个参数应该是一个数组“这样的数组错误。有人能帮上忙吗?

代码语言:javascript
复制
<?php
$dirs = array_filter(glob('*'), 'is_dir');
 while (list($key, $value) = each($dirs)) {
  $dirs_2 = array_filter(glob($value.'/*'), 'is_dir');
  while (list($key_2, $value_2) = each($dirs_2)) {
    foreach (array_filter(glob($value_2."/*.zip")) as $filename) {
        echo "$filename size " . filesize($filename) . "\n";
    }
   }
 }
?>

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-04-25 05:48:49

一个类似于原始代码的简单解决方案可能如下所示:

代码语言:javascript
复制
$dirs = scandir('.');
foreach ($dirs as $dir) {
  if (is_dir($dir) && !preg_match('/^\.\.?$/', $dir)) {
    $dirs2 = scandir($dir);
    foreach ($dirs2 as $dir2) {
       if (is_dir($dir . '/' . $dir2) && !preg_match('/^\.\.?$/', $dir2)) {
        $files = scandir($dir . '/' . $dir2);
        foreach ($files as $file) {
          if (preg_match('/.+\.zip$/', $file)) {
            echo $file . "\n";
          }
        }
      }
    }
  }
}
票数 1
EN

Stack Overflow用户

发布于 2013-04-25 05:22:20

您可以使用SplIterators来实现这一点。RecursiveDirectoryIterator旨在实现以下目的:

代码语言:javascript
复制
// create recursive directory iterator for zip folder
$directory_iterator = new RecursiveDirectoryIterator('/path/to/zip/files');´   
// required to iterate through results using foreach
$recusive_iterator = new RecursiveIteratorIterator($directory_iterator);
// filter only .zip files
$regex_iterator = new RegexIterator($recursive_iterator, '/^.*\.zip$/',
                          RegexIterator::GET_MATCH);

// iterate through results
foreach($regex_iterator as $file_info) {
    var_dump($file_info);
}
票数 2
EN

Stack Overflow用户

发布于 2013-04-25 05:23:04

这可能意味着glob()返回了false,这表明发生了错误,你可以通过检查是否返回了false来跳过这一步,在这种情况下提供一个空数组,这样你的代码就可以继续工作,比如替换你的以下代码:

代码语言:javascript
复制
$dirs_2 = array_filter(glob($value.'/*'), 'is_dir');

对于这一条:

代码语言:javascript
复制
$dirs_2 = array_filter(glob($value.'/*') || array(), 'is_dir');

作为附注,您可以完全跳过所有的array_filter,因为您可以传递一个参数glob(),这样它只返回目录条目,它的标志是GLOB_ONLYDIR,所以您可以替换以下代码:

代码语言:javascript
复制
$dirs = array_filter(glob('*'), 'is_dir');

对于这一条:

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

https://stackoverflow.com/questions/16202357

复制
相关文章

相似问题

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