PHP 以键作为文件创建日期的数组
PHP array with keys as file's creation date
所以我有一个文件夹,path/to/folder
,文件夹中有文件夹,文件夹中有文件,等等——所有这些都在一个文件夹中 path/to/folder
。我想将所有图像的所有名称(.gif、.png、.jpg、.jpeg 等)存储在这个文件夹中 path/to/folder
就像这样(我的尝试):
$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
这里,/.../
,意思是"any number of folders within 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-->
?>
以下代码应创建一个日期时间键数组:
<?php
$myArray = glob("/*.jpg");
$newArr = array();
foreach($myArray as $item){
$timestamp = filectime($item);
if ($timestamp === false) {
continue;
}
$date = new \DateTime();
$date->setTimestamp($timestamp);
$formattedDate = $date->format('m-d-Y');
$newArr[$formattedDate]=$item;
}
array_count_values($newArr);
echo "<pre>";
print_r($newArr);
//<!-- CODE TO GRAPH ITEMS BY FREQUENCY-->
这是我在同一天创建多个 JPG 文件时打印出来的内容:
Array
(
[04-12-2016] => sdfdsf.jpg
)
关于递归查找文件,你可以试试我在自己的个人项目中使用过的功能:
function findDirectories($rootPath) {
$directories = array();
foreach (glob($rootPath . "/*", GLOB_ONLYDIR) as $directory) {
$directories[] = $directory;
}
return $directories;
}
function findFiles($rootPath, $extension) {
$files = array();
foreach (glob($rootPath . "/*.$extension") as $file) {
$files[] = $file;
}
return $files;
}
function findFilesRecursive($rootPath,$extension) {
$files = findFiles($rootPath,$extension);
$directories = findDirectories($rootPath);
if (!empty($directories)) {
foreach ($directories as $key=>$directory) {
$foundFiles = findFilesRecursive($directory,$extension);
foreach ($foundFiles as $foundFile) {
$files[] = $foundFile;
}
}
}
return $files;
}
所以我有一个文件夹,path/to/folder
,文件夹中有文件夹,文件夹中有文件,等等——所有这些都在一个文件夹中 path/to/folder
。我想将所有图像的所有名称(.gif、.png、.jpg、.jpeg 等)存储在这个文件夹中 path/to/folder
就像这样(我的尝试):
$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
这里,/.../
,意思是"any number of folders within 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-->
?>
以下代码应创建一个日期时间键数组:
<?php
$myArray = glob("/*.jpg");
$newArr = array();
foreach($myArray as $item){
$timestamp = filectime($item);
if ($timestamp === false) {
continue;
}
$date = new \DateTime();
$date->setTimestamp($timestamp);
$formattedDate = $date->format('m-d-Y');
$newArr[$formattedDate]=$item;
}
array_count_values($newArr);
echo "<pre>";
print_r($newArr);
//<!-- CODE TO GRAPH ITEMS BY FREQUENCY-->
这是我在同一天创建多个 JPG 文件时打印出来的内容:
Array
(
[04-12-2016] => sdfdsf.jpg
)
关于递归查找文件,你可以试试我在自己的个人项目中使用过的功能:
function findDirectories($rootPath) {
$directories = array();
foreach (glob($rootPath . "/*", GLOB_ONLYDIR) as $directory) {
$directories[] = $directory;
}
return $directories;
}
function findFiles($rootPath, $extension) {
$files = array();
foreach (glob($rootPath . "/*.$extension") as $file) {
$files[] = $file;
}
return $files;
}
function findFilesRecursive($rootPath,$extension) {
$files = findFiles($rootPath,$extension);
$directories = findDirectories($rootPath);
if (!empty($directories)) {
foreach ($directories as $key=>$directory) {
$foundFiles = findFilesRecursive($directory,$extension);
foreach ($foundFiles as $foundFile) {
$files[] = $foundFile;
}
}
}
return $files;
}