Экспорт массива в csv-файл. Импорт массива из csv-файла | REDs Group
REDS Group
ул. Большая Академическая, дом 5, стр. 1, Москва.

Экспорт массива в csv-файл. Импорт массива из csv-файла

87
При работе с Битрикс можно столкнуться с задачей экспорта массива некоторых свойств разделов инфоблока из системы, импорта в систему и использования в формате массива. В данной статье для экспорта и импорта с формированием массива был выбран формат файлов csv (Comma Separated Values) и соответствующая библиотека.

    Для импорта в csv файл необходимо:

  1. В файле после подключения header.php подключить модуль работы с инфоблоками.
    CModule::IncludeModule('iblock');
    

  2. Сформировать массив для выгрузки. Для примера приведем массив из нескольких свойств разделов инфоблока:
    $a = array();
    $rsSections = CIBlockSection::GetList(array(),array("IBLOCK_ID" => 12,), false, array("ID","NAME","UF_LINK"));
    while($ar_result = $rsSections->GetNext()){   
        $a[$ar_result['ID']]['NAME'] = $ar_result['NAME'];
        $a[$ar_result['ID']]['LINK'] = $ar_result['UF_LINK'];
    
    }
    print_r($a);
    

  3. Добавить в файл следующие строки библиотеки:
    class CSV {
    
        private $_csv_file = null;
        public function __construct($csv_file) {
            if (file_exists($csv_file)) { //Если файл существует
                $this->_csv_file = $csv_file; //Записываем путь к файлу в переменную
            }
            else throw new Exception("Файл \"$csv_file\" не найден"); //Если файл не найден то вызываем исключение
        }
    
        public function setCSV(Array $csv) {
            $handle = fopen($this->_csv_file, "a"); //Открываем csv для до-записи, если указать w, то  инфомация которая была в csv будет затерта
    
            foreach ($csv as $value) { //Проходим массив
                fputcsv($handle, explode(";", $value), ";"); //Записываем, 3-ий параметр - разделитель поля
            }
            fclose($handle); //Закрываем
        }
    
    
        public function getCSV() {
            $handle = fopen($this->_csv_file, "r"); //Открываем csv для чтения
    
            $array_line_full = array(); //Массив будет хранить данные из csv
            while (($line = fgetcsv($handle, 0, ";")) !== FALSE) { //Проходим весь csv-файл, и читаем построчно. 3-ий параметр разделитель поля
                $array_line_full[] = $line; //Записываем строчки в массив
            }
            fclose($handle); //Закрываем файл
            return $array_line_full; //Возвращаем прочтенные данные
        }
    
    }
    
    

  4. Сформировать строки из элементов одномерных массивов для записи их в файл. Элементы в строке нужно разделить запятыми, по окончании одномерного массива перевести курсор на новую строку.
    Необходимо создать в файловой системе пустой файл формата csv для записи в него массива и указать путь к файлу.
    foreach($a as $value){ 
    $line1 = ""; 
    	$line1 = $value['NAME'].";".$value['LINK']."\n"; //Формируем строки
    
    $line1 = array($line1);
    	$csv_new = new CSV("services/test.csv"); //Указываем путь к файлу
    	$csv_new->setCSV($line1); //Записываем в файл
    print_r($line1); 
    }
    

Для экспорта из csv файла необходимо:

  1. В файле после подключения header.php подключить модуль работы с инфоблоками.
    CModule::IncludeModule('iblock');
    

  2. Добавить в файле строки библиотеки для чтения из файла csv.
    class CSV {
    
        private $_csv_file = null;
    
        public function __construct($csv_file) {
            if (file_exists($csv_file)) { //Если файл существует
                $this->_csv_file = $csv_file; //Записываем путь к файлу в переменную
            }
            else throw new Exception("Файл \"$csv_file\" не найден"); //Если файл не найден то вызываем исключение
        }
    
        public function setCSV(Array $csv) {
            $handle = fopen($this->_csv_file, "a"); //Открываем csv для до-записи, если указать w, то  ифномация которая была в csv будет затерта
    
            foreach ($csv as $value) { //Проходим массив
                fputcsv($handle, explode(";", $value), ";"); //Записываем, 3-ий параметр - разделитель поля
            }
            fclose($handle); //Закрываем
        }
    
    
        public function getCSV() {
            $handle = fopen($this->_csv_file, "r"); //Открываем csv для чтения
    
            $array_line_full = array(); //Массив будет хранить данные из csv
            while (($line = fgetcsv($handle, 0, ";")) !== FALSE) { //Проходим весь csv-файл, и читаем построчно. 3-ий параметр разделитель поля
                $array_line_full[] = $line; //Записываем строчки в массив
            }
            fclose($handle); //Закрываем файл
            return $array_line_full; //Возвращаем прочтенные данные
        }
    
    }
    
  3. Указать путь к csv файлу с экспортированным содержимым, получить массив и записать в переменную.
    $csv = new CSV("services/test.csv");  //Указываем путь к файлу
    $get_csv = $csv->getCSV(); //Получаем значения массива
    print_r($get_csv);
    
14.05.2018 /
Комментарии (0)