【问题标题】:PHP - find all all files within directory that match certain string and put in arrayPHP - 查找目录中与特定字符串匹配的所有文件并放入数组
【发布时间】:2013-11-26 14:09:51
【问题描述】:

我的服务器上有一个客户上传的图片目录。我需要能够获取与某个字符串或项目代码匹配的所有文件并将它们放入一个数组中。文件名和扩展名总是可以变化的,但每个文件的文件名中总是有一个 8 位数的项目代码。因此,例如在我的目录中说我有:

/images/

62115465.jpg
62115465-02.jpg
62115465-07.jpg
13452766.png
56773392.jpeg
56773392-avatar.jpg

我希望能够提取所有匹配 8 位项目代码的文件,所以:

//all images that have 62115465 in the file name would give me

62115465.jpg
62115465-02.jpg
62115465-07.jpg

//or all images that have 56773392 in the file name would give me

56773392.jpeg
56773392-avatar.jpg

然后希望它们像这样放在一个数组中:

$all_files = array(
  '62115465.jpg',
  '62115465-02.jpg',
  '62115465-07.jpg'
);

我尝试使用下面的glob() 函数,它可以匹配62115465.jpg 之类的一些文件,但没有选择带有-02-07 标记的其他2 个文件

$files = glob('62115465.'.*');

【问题讨论】:

  • 您是否尝试删除.
  • 这应该会为你排序,$files = glob('62115465*.*'); 它会匹配以数字开头的任何内容和任何分机。

标签: php arrays file


【解决方案1】:
glob('62115465*');

注意删除了.。 glob() 基本上复制了在命令提示符下执行dir *.txt 之类的操作。

【讨论】:

    【解决方案2】:

    我知道这个问题已经回答过了,但是对于新手/中级编码人员,或者任何刚接触 glob() 函数的人(AHEM ME COUGH),目前还不清楚这里发生了什么。所以,这是一个完整的脚本,我拼凑起来做几乎相同的事情 OP 要求 - 在目录中搜索以目标前缀开头的所有文件并将它们添加到数组中。:

    <?php
    $imgs = array();
    $dir =  $_SERVER['DOCUMENT_ROOT'].'/path/to/your/images';
    $prefix = 'your-prefix_string-_-';
    chdir($dir);
    $matches = glob("$prefix*");
    if(is_array($matches) && !empty($matches)){
        foreach($matches as $match){
            $imgs[] = $match;
        }
    }
    ?>
    

    【讨论】:

      【解决方案3】:

      你可以试试这个,

       $files = glob('62115465.*');
      

      【讨论】:

        【解决方案4】:

        试试这样-

        $files = glob("[^62115465]*.*);
        

        或者像这样:

        $files = glob("62115465*.*);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-07-06
          • 2020-06-04
          • 1970-01-01
          • 1970-01-01
          • 2020-08-07
          • 1970-01-01
          • 2016-06-22
          • 1970-01-01
          相关资源
          最近更新 更多