我尝试根据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 _ 。
思想?
答案 0 :(得分:2)
通过1000个文件的遍历从不比在数据库(无论何种类型)中索引这些文件更快,并为它们执行数据库查询。这就是数据库的用途。
答案 1 :(得分:0)
我有15,000首mp3歌曲的类似问题。
在Win命令行目录
中dir *.mp3 /b /s > mp3.bat
在NotePad ++中使用正则表达式搜索和替换,转换文件名和前缀和附加文本,创建一个Rename语句并运行mp3.bat。
这样的东西可能适合PHP:
这是一些简化和未测试的示例代码,用于显示我的建议。
示例逻辑表:
$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);
}