Библиотека импорта CSV для CodeIgniter

Необходимо внедрить импорт csv или xls в приложение, созданное с помощью CodeIgniter. Есть ли для этого библиотека? Любое предложение оценили.

Related of "Библиотека импорта CSV для CodeIgniter"

Вот простой способ сделать это. Я не знаю, что делают люди, но я использую это

Это моя библиотека чтения csv

<?php if (!defined('BASEPATH')) exit('No direct script access allowed'); class CSVReader { var $fields; /** columns names retrieved after parsing */ var $separator = ';'; /** separator used to explode each line */ var $enclosure = '"'; /** enclosure used to decorate each field */ var $max_row_size = 4096; /** maximum row size to be used for decoding */ function parse_file($p_Filepath) { $file = fopen($p_Filepath, 'r'); $this->fields = fgetcsv($file, $this->max_row_size, $this->separator, $this->enclosure); $keys_values = explode(',',$this->fields[0]); $content = array(); $keys = $this->escape_string($keys_values); $i = 1; while( ($row = fgetcsv($file, $this->max_row_size, $this->separator, $this->enclosure)) != false ) { if( $row != null ) { // skip empty lines $values = explode(',',$row[0]); if(count($keys) == count($values)){ $arr = array(); $new_values = array(); $new_values = $this->escape_string($values); for($j=0;$j<count($keys);$j++){ if($keys[$j] != ""){ $arr[$keys[$j]] = $new_values[$j]; } } $content[$i]= $arr; $i++; } } } fclose($file); return $content; } function escape_string($data){ $result = array(); foreach($data as $row){ $result[] = str_replace('"', '',$row); } return $result; } } ?> 

И метод контроллера

 function readExcel() { $this->load->library('csvreader'); $result = $this->csvreader->parse_file('Test.csv'); $data['csvData'] = $result; $this->load->view('view_csv', $data); } 

И это мнение

 <table cellpadding="0" cellspacing="0" width="100%"> <tr> <td width = "10%">ID</td> <td width = "20%">NAME</td> <td width = "20%">SHORT DESCRIPTION</td> <td width = "30%">LONG DESCRIPTION</td> <td width = "10%">STATUS</td> <td width = "10%">PARENTID</td> </tr> <?php foreach($csvData as $field){?> <tr> <td><?php echo $field['id']?></td> <td><?php echo $field['name']?></td> <td><?php echo $field['shortdesc']?></td> <td><?php echo $field['longdesc']?></td> <td><?php echo $field['status']?></td> <td><?php echo $field['parentid']?></td> </tr> <?php }?> </table> 

Ссылка здесь

Это улучшенная версия принятого ответа Рахеля Шаня – я отредактировал его ответ, но мое редактирование было отклонено, однако это важное изменение …

При анализе каждой строки данных нецелесообразно использовать explode() в запятой, поскольку это не обрабатывает строки с кавычками, содержащие запятые. Explode разбивает эти строки на подстроки и предоставляет дополнительные элементы массива в $values , поэтому эта проверка не выполняется:

 if (count($keys) == count($values)) { 

Вместо этого у PHP есть специально разработанный метод для этого; str_getcsv () . Я обновил исходный код ответа соответственно.

Библиотека CSV Reader:

 <?php if (!defined('BASEPATH')) exit('No direct script access allowed'); class CSVReader { var $fields;/** columns names retrieved after parsing */ var $separator = ';';/** separator used to explode each line */ var $enclosure = '"';/** enclosure used to decorate each field */ var $max_row_size = 4096;/** maximum row size to be used for decoding */ function parse_file($p_Filepath) { $file = fopen($p_Filepath, 'r'); $this->fields = fgetcsv($file, $this->max_row_size, $this->separator, $this->enclosure); $keys = str_getcsv($this->fields[0]); $i = 1; while (($row = fgetcsv($file, $this->max_row_size, $this->separator, $this->enclosure)) != false) { if ($row != null) { // skip empty lines $values = str_getcsv($row[0]); if (count($keys) == count($values)) { $arr = array(); for ($j = 0; $j < count($keys); $j++) { if ($keys[$j] != "") { $arr[$keys[$j]] = $values[$j]; } } $content[$i] = $arr; $i++; } } } fclose($file); return $content; } } ?> 

Метод контроллера:

 function readExcel() { $this->load->library('csvreader'); $result = $this->csvreader->parse_file('Test.csv'); $data['csvData'] = $result; $this->load->view('view_csv', $data); } 

И это мнение:

 <table cellpadding="0" cellspacing="0" width="100%"> <tr> <td width="10%">ID</td> <td width="20%">NAME</td> <td width="20%">SHORT DESCRIPTION</td> <td width="30%">LONG DESCRIPTION</td> <td width="10%">STATUS</td> <td width="10%">PARENTID</td> </tr> <?php foreach ($csvData as $field) { ?> <tr> <td><?php echo $field['id'] ?></td> <td><?php echo $field['name'] ?></td> <td><?php echo $field['shortdesc'] ?></td> <td><?php echo $field['longdesc'] ?></td> <td><?php echo $field['status'] ?></td> <td><?php echo $field['parentid'] ?></td> </tr> <?php } ?> </table> 

Ну, не против меня, я только что изменил библиотеку ajmedway, чтобы включить разделители на случай, если вы хотите получить данные, чтобы разрешить использование файлов с разделителями TSV или труб. Если вам нужен простой старый CSV, все в порядке.

 class CSVReader { var $fields;/** columns names retrieved after parsing */ var $separator = ';';/** separator used to explode each line */ var $enclosure = '"';/** enclosure used to decorate each field */ var $max_row_size = 4096;/** maximum row size to be used for decoding */ function parse_file($p_Filepath, $delimiter = FALSE ) { $file = fopen($p_Filepath, 'r'); $this->fields = fgetcsv($file, $this->max_row_size, $this->separator, $this->enclosure); if ($delimiter==FALSE) { $keys = str_getcsv($this->fields[0]); $i = 1; while (($row = fgetcsv($file, $this->max_row_size, $this->separator, $this->enclosure)) != false) { if ($row != null) { // skip empty lines $values = str_getcsv($row[0]); if (count($keys) == count($values)) { $arr = array(); for ($j = 0; $j < count($keys); $j++) { if ($keys[$j] != "") { $arr[$keys[$j]] = $values[$j]; } } $content[$i] = $arr; $i++; } } } } else{ $keys = str_getcsv($this->fields[0],$delimiter); $i = 1; while (($row = fgetcsv($file, $this->max_row_size, $this->separator, $this->enclosure)) != false) { if ($row != null) { // skip empty lines $values = str_getcsv($row[0],$delimiter); if (count($keys) == count($values)) { $arr = array(); for ($j = 0; $j < count($keys); $j++) { if ($keys[$j] != "") { $arr[$keys[$j]] = $values[$j]; } } $content[$i] = $arr; $i++; } } } } fclose($file); return $content; }}?> 

Это улучшенная версия для пустых строк и дополнительных пробелов и вкладок …

класс CSVReader {

 function csv_to_array($Filepath) { //Get csv file content $csvData = file_get_contents($Filepath); //Remove empty lines $csvData = preg_replace("/(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+/", "\r\n", $csvData); //String convert in array formate and remove double quote(") $array = array(); $array = $this->escape_string(preg_split('/\r\n|\r|\n/', $csvData)); $new_content_in_array = array(); if($array) { //Get array key $array_keys = array(); $array_keys = array_filter(array_map('trim', explode(';',$array[0]))); //Get array value $array_values = array(); for ($i=1;$i<count($array);$i++) { if($array[$i]) { $array_values[] = array_filter(array_map('trim', explode(';',$array[$i]))); } } //Convert in associative array if($array_keys && $array_values) { $assoc_array = array(); foreach ($array_values as $ky => $val) { for($j=0;$j<count($array_keys);$j++){ if($array_keys[$j] != "" && $val[$j] != "" && (count($array_keys) == count($val))) { $assoc_array[$array_keys[$j]] = $val[$j]; } } $new_content_in_array[] = $assoc_array; } } } return $new_content_in_array; } function escape_string($data){ $result = array(); foreach($data as $row){ $result[] = preg_replace("/(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+/", "", str_replace('"', '',$row)); } return $result; } 

}?>

Вызовите контроллер:

 $this->load->library('csvreader'); $import_csv_data = $this->csvreader->csv_to_array($path); print_r($import_csv_data ); exit;