【发布时间】:2016-04-12 22:37:02
【问题描述】:
所以我有一个文件夹path/to/folder,文件夹内有文件夹,文件夹内有文件,等等——都在一个文件夹内path/to/folder。我想在这个文件夹path/to/folder 中存储所有图像的所有名称(.gif、.png、.jpg、.jpeg 等)(我的尝试):
$arr = glob("path/to/folder/*.jpg");//not sure how to specify or "|" here
我还需要与图像元数据相关的日期(创建日期),如下所示(请参阅下面的伪代码):
foreach($arr as $a){
$date_of_a = function_getting_dates_of_a($a);//filectime?
$newArr[$date_of_a]=function_getting_names_of_a($a);//names are filtered by a pattern
//^^^^^^^^^^^^^^^^^^^^^^^^^^^I've already created this.
}
这样我可以有相同名称的 values 和不同的 keys,这将是日期,因此两个同名和相同日期对(或元组取决于有多少重复)将浓缩为一个唯一的名称日期项目。例如,
2016-01-01 => path/to/folder/.../name1.jpg//*duplicate name-date pair
2016-01-02 => path/to/folder/.../name2.jpg
2016-01-01 => path/to/folder/.../name1.jpg//*duplicate name-date pair
2016-01-02 => path/to/folder/.../name1.jpg
将数组减少到
2016-01-01 => path/to/folder/.../name1.jpg//*only one now
2016-01-02 => path/to/folder/.../name2.jpg
2016-01-02 => path/to/folder/.../name1.jpg
这里,/.../ 的意思是“path/to/folder 中的任意数量的文件夹”。我正在处理的数据意味着2016-01-01 => path/to/folder/.../name1.jpg 和2016-01-02 => path/to/folder/.../name1.jpg 是在不同时间制作的两个相同对象。最后,我希望能够使用array_count_values 计算每个名称的实例数。
尝试
<?php
$myArray = glob("path/to/folder/*.jpg");
foreach($myArray as $item){
$date = filectime($item);//What if no date? Is that possible?
if(preg_match('/PATTERN/',$item,$match)==1){
$newArr[$date]=current($match);
}
}
array_count_values($newArr);
<!-- CODE TO GRAPH ITEMS BY FREQUENCY-->
?>
【问题讨论】:
-
您有尝试解决方案的示例代码吗?
-
两个相同的对象怎么会有不同的日期?从你写的来看,路径是一样的?
-
文件可以有相同的日期,可以是不同的文件名,也可以在不同的目录中相同。
-
@Eric,你是对的,路径可能不同;但是,
function_getting_names_of_a将匹配特定命名图像的模式,因此不会考虑文件路径。我已经写了function_getting_names_of_a,但是这里排除了。 -
@Eric,我所说的“相同对象”是指数据所代表的内容和业务行为。在另一个日期拍摄的同名图像代表两个独特的“对象”;例如,banana 是一个名字,你可以有两个香蕉,这样它们就被认为是“相同的”,因为它们是香蕉。这有意义吗?