Во-первых, не открывайте файл на каждой итерации, делайте это перед циклом.
$fps = array(); // fps = File Pointers
$days = array( 'Sunday', 'Monday', 'Tuesday', ...);
foreach( $days as $key => $name){
$fps[ $name] = fopen( 'a', $name . '.csv');
if( !$fps[ $name]){
die("Cannot open $name.csv");
}
// Although I wouldn't rely on date's `l` format, because
// it can be localized and script may just stop working
// and rather use:
$fps[ $key] = fopen( 'a', $name . '.csv');
if( $fps[ $key])...
// Sunday = 7 = 0, Monday = 1...
}
Теперь вы будете обращаться к полям через date( 'w')
, который будет давать числа 0 - воскресенье, 6 - суббота:
$day = date( 'w', $timestamp);
О создании уникальных результатов ... Возможно, вам потребуется использовать такую функцию, как in_array()
и сохранитьвсе обработанные строки в одном массиве.
Для чтения и записи файлов CSV существует 2 функции: fgetcsv()
соответственноfputcsv()
.Итак, весь цикл:
$temp = "data.csv";
$rows = array(); // List of unique itemps
$fp = fopen( $temp, 'r') or die( "Cannot open `$temp` for reading");
// Put here loop which will open all 7 files as mentioned above
// Optionally skip first row (it may contain header)
fgets( $fp);
// Read each row
while( ($array = fgetcsv( $fp, 10000, ',', '"') !== false){
// Check unique row
$row = implode( ',', $array);
if( in_array( $row, $rows)){
continue; // Skip this iteration
}
$rows[] = $row;
$day = date( 'w', $array[0]);
fputcsv( $fps[$day], $array);
}
И не забудьте закрыть все файлы:
fclose( $fp);
foreach( $fps as $fp){
fclose( $fp);
}