Reputation: 183
I have a directory with files like this:
/home/fichier/2017-10-01_Opens.tsv
/home/fichier/2017-10-02_Opens.tsv
/home/fichier/2017-10-03_Opens.tsv
/home/fichier/2017-10-05_Opens.tsv
/home/fichier/2017-10-06_Opens.tsv
/home/fichier/2017-10-07_Opens.tsv
I'm using PHP like this to get all dates, where $range
is an array of dates:
for($k=0;$k<sizeof($range);$k++)
{
$path = '/home/fichier/'.$kk[$j]."_Opens".tsv";
}
The result when dates bewteen 2017-10-03 and 2017-10-06 are chosen is:
/home/fichier/2017-10-03_Opens.tsv
/home/fichier/2017-10-05_Opens.tsv
/home/fichier/2017-10-06_Opens.tsv
The loop is taking a very long time when I have big date range (for example, more than 6 months). Is there any solution to get all files with one command and save these in an array without using a loop?
Thank you!
Upvotes: 0
Views: 106
Reputation: 1190
Edit use shell_exec this you file:
/home/fichier/2017-10-01_Opens.tsv
/home/fichier/2017-10-02_Opens.tsv
/home/fichier/2017-10-03_Opens.tsv
/home/fichier/2017-10-05_Opens.tsv
/home/fichier/2017-10-06_Opens.tsv
/home/fichier/2017-10-07_Opens.tsv
use like this :
$files = shell_exec("ls -d /home/fichier/*0[3-6]_Opens.tsv");
Output:
/home/fichier/2017-10-03_Opens.tsv
/home/fichier/2017-10-05_Opens.tsv
/home/fichier/2017-10-06_Opens.tsv
Upvotes: 1
Reputation: 16997
You can use array_filter()
Here is demo
<?php
$range = array(
'/home/fichier/2017-10-01_Opens.tsv',
'/home/fichier/2017-10-02_Opens.tsv',
'/home/fichier/2017-10-03_Opens.tsv',
'/home/fichier/2017-10-05_Opens.tsv',
'/home/fichier/2017-10-06_Opens.tsv',
'/home/fichier/2017-10-07_Opens.tsv',
);
/*
you may use explode() also like below
$last = explode('/',$val);
$date = explode('_',$last[count($last)-1]);
$date = strtotime( $date[0] );
return $date >= strtotime('2017-10-03') && $date <= strtotime('2017-10-06');
*/
$result = array_filter($range, function ($val){
preg_match("/(\d{4}-\d{2}-\d{2})/", $val, $match);
$date = strtotime($match[0]);
return $date >= strtotime('2017-10-03') && $date <= strtotime('2017-10-06');
});
print_r($result);
// to reset keys use : print_r(array_values($result))
?>
Output:
Array
(
[2] => /home/fichier/2017-10-03_Opens.tsv
[3] => /home/fichier/2017-10-05_Opens.tsv
[4] => /home/fichier/2017-10-06_Opens.tsv
)
Upvotes: 1