Сортировка CSV файлов
count($row)) { $difference = count($header) – count($row); for ($i = 1; $i <= $difference; $i++) { $row[count($row) + 1] = ''; } } } if($row[0] != 'sep=') { $data[] = $row; } } fclose($handle); } return $data; } /** * Функция сортировки массива по 1-му полю или N полей * * @param string|array $keys, string $order [ASC|DESC] * * @return int */ function sort_arr_ncol($keys, $order = 'ASC') { $order = ($order == 'DESC') ? -1 : 1; if(is_array($keys)) { //если сортировка по нескольким полям return function($a, $b) use ($keys, $order) { foreach($keys as $k) { if($a[$k] != $b[$k]) { return $order * (($a[$k] < $b[$k]) ? 1 : -1); } } return 0; }; } else { //если сортировка по одному полю return function($a, $b) use ($keys, $order) { if ($a[$keys] == $b[$keys]) { return 0; } return $order * (($a[$keys] < $b[$keys]) ? 1 : -1); }; } } /** * Функция преобразования массива в строку в CSV формате * * @param @param string $input, int $file_size, string $delimiter, string $enclosure * * @return string */ function str_putcsv($input, $file_size, $delimiter = ';', $enclosure = '"') { // Open a memory "file" for read/write... $fp = fopen('php://temp', 'r+'); // ... write the $input array to the "file" using fputcsv()... fputcsv($fp, $input, $delimiter, $enclosure); // ... rewind the "file" so we can read what we just wrote... rewind($fp); // ... read the entire line into a variable... $data = stream_get_contents($fp); // ... close the "file"... fclose($fp); // ... and return the $data to the caller, with the trailing newline from fgets() removed. return $data; //rtrim($data, "\r"); } // Параметры сортировщика $data_dir_name = "input"; // Каталог с исходными файлами $res_dir_name = "output"; // Каталог с отсортированными файлами $key_list_str = 'email'; // Название столбца для сортировки (с нуля) if(!empty($_REQUEST['action']) && $_REQUEST['action'] = 'run') { if(!isset($_REQUEST['charset'])) { $charset = 'no'; } else { $charset = $_REQUEST['charset']; } $k = 0; $er = 0; $error_file_names = array(); $all_file_count = 0; $entries = scandir($data_dir_name); foreach($entries as $entry) { if(mb_strpos($entry, '.csv') !== false) { // Обрабатываем только CSV файлы $filepath_in = $data_dir_name . "/" . $entry; $file_size = filesize($filepath_in); $csv_data_arr = csv2array($filepath_in, $file_size); $header_arr[0] = array_shift($csv_data_arr); $key_list = array_keys($header_arr[0], $key_list_str); usort($csv_data_arr, sort_arr_ncol($key_list, 'ASC')); $csv_data_arr = array_merge($header_arr, $csv_data_arr); // Формируем строку для CSV файла $res_csv_file = ''; foreach($csv_data_arr as $key_row => $csv_data_arr_row) { $res_csv_file .= str_putcsv($csv_data_arr_row, $file_size); } if($charset == ‘yes’) { $res_csv_file = iconv(“WINDOWS-1251”, “UTF-8”, $res_csv_file); if($res_csv_file == false) { $res_csv_file = iconv(“WINDOWS-1251”, “UTF-8//IGNORE”, $res_csv_file); $error_file_names[] = $entry; } } $filepath_out = $res_dir_name . “/” . $entry; file_put_contents($filepath_out, $res_csv_file) ? $k++ : $er++; $all_file_count++; } } echo “Обработано файлов: ” . $k . “ из ” . $all_file_count . “. Ошибок: ” . $er . “
“;
echo “” . implode(“
“, $error_file_names) . “
Перезагрузка :: Запуск…