过滤PHP

时间:2015-05-05 20:40:52

标签: php glob

我尝试根据RecipeID和StepID将一堆文件组合在一起。我没有将所有文件名存储在表中,而是决定只使用glob来获取所请求配方的图像。我觉得这会更高效,更少数据处理。请记住,目录最终将包含数千个图像。如果我对此有误,那么下面的问题就没有必要了解lol

所以,让我说我有RecipeID#5(nachos,mmmm),它有3个准备步骤。我决定的命名惯例是这样的:

5_1_getchips.jpg
5_2_laycheese.jpg
5_2_laytomatos.jpg
5_2_laysalsa.jpg
5_3_bake.jpg
5_finishednachos.jpg
5_morefinishedproduct.jpg

这些文件可能是由相机生成的,所以DSC ###。jpg ...或者这个人可能已经按照我的说法实际命名了每张图片。每步可以存在多个图像。我不确定我将如何处理欺骗文件名,但我觉得这超出了范围。

我希望得到所有的" 5 _"图像...但是过滤掉所有那些没有任何步骤#(在一个DIV中分组),然后获得所有具有步骤(在各自的DIV中分组)的图像。

我正在考虑像

这样的事情
foreach ( glob( $IMAGES_RECIPE .  $RecipeID . "-*.*") as $image)

然后使用substr来过滤掉步骤#但是我担心逻辑是正确的,因为如果原始文件名中已经包含 _#_ 该怎么办?由于某些原因。也许我需要有一个严格的命名约定,如果它不属于某个步骤,它总是包含 _0 _

思想?

2 个答案:

答案 0 :(得分:2)

通过1000个文件的遍历从不比在数据库(无论何种类型)中索引这些文件更快,并为它们执行数据库查询。这就是数据库的用途。

答案 1 :(得分:0)

我有15,000首mp3歌曲的类似问题。

在Win命令行目录

dir *.mp3 /b /s > mp3.bat

在NotePad ++中使用正则表达式搜索和替换,转换文件名和前缀和附加文本,创建一个Rename语句并运行mp3.bat。

这样的东西可能适合PHP:

  1. 使用正则表达式使用preg_replace提取数字
  2. 创建逻辑表以创建新文件名的单词
  3. 使用rename()
  4. 创建新文件名

    这是一些简化和未测试的示例代码,用于显示我的建议。

    示例逻辑表:

     $translation[x][y][z] = "phrase";
     $translation[x][y][z] = "phrase";
     $translation[x][y][z] = "phrase";
     $translation[x][y][z] = "phrase";
    
      $folder = '/home/user/public_html/recipies/';
      $dir=opendir($folder);
      while (false !== ($found=readdir($dir))){
        if pathinfo($file,PATHINFO_EXTENSION) == '.jpg')
         { 
           $files[]= pathinfo($file,PATHINFO_FILENAME);
         }
      }
      foreach($files as $key=> $filename){
        $digit1 = 'DSC(\d)\d\d\.jpg/',"$1", $filename);
        $digit2 = 'DSC\d(\d)\d\.jpg',"$1", $filename);
        $digit3 = 'DSC\d\d(\d)\.jpg',"$1", $filename);
        $newName = $translation[$digit1][$digit2][$digit3]
        ren($filename,$newfilename);
      }