Sie müssen CSV- oder XLS-Import in Anwendung implementieren, die mit CodeIgniter erstellt wurde. Gibt es dafür eine Bibliothek? Jeder Vorschlag geschätzt.CSV-Importbibliothek für CodeIgniter
Antwort
Hier ist eine einfache Möglichkeit, dies zu tun. Ich weiß nicht, was die Leute tun, aber ich benutze diese
Dies ist mein csv Leser Bibliothek
<?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;
}
}
?>
und Controller-Methode
function readExcel()
{
$this->load->library('csvreader');
$result = $this->csvreader->parse_file('Test.csv');
$data['csvData'] = $result;
$this->load->view('view_csv', $data);
}
Und dies ist eine Ansicht
<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>
Referenz Here
Dies ist eine verbesserte Version des raheel des shan akzeptierte Antwort - ich bearbeitet seine Antwort, aber meine bearbeiten wurde abgelehnt, aber es ist eine wichtige Änderung ist ...
Wenn jede Datenreihe Parsen es nicht klug ist explode()
zu verwenden auf das Komma, da es keine mit Zitaten umhüllten Strings behandelt, die Kommas enthalten. Explode bricht diese Zeichenfolgen in Teilstrings und gibt zusätzliche Array-Elemente in $values
, so dass diese Prüfung fehlschlägt:
if (count($keys) == count($values)) {
Stattdessen hat PHP eine speziell gebaute Methode, dies zu handhaben; str_getcsv(). Ich habe den ursprünglichen Antwortcode entsprechend aktualisiert.
Die CSV-Reader-Bibliothek:
<?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;
}
}
?>
Controller-Methode:
function readExcel() {
$this->load->library('csvreader');
$result = $this->csvreader->parse_file('Test.csv');
$data['csvData'] = $result;
$this->load->view('view_csv', $data);
}
Und dies ist die Ansicht:
<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>
Nun stört mich nicht, ich ist gerade geändert ajmedway Bibliothek, um Delimiter aufzunehmen, nur für den Fall, dass Sie Daten von zB TSV- oder Pipe-Dateien erhalten möchten. Wenn Sie einfache alte CSV wollen, ist es in Ordnung.
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;
}}?>
Dies ist falsch wenn ($ delimiter = FALSE), da Sie $ delimiter auf FALSE setzen und seinen Status nicht überprüfen. Es sollte sein, wenn ($ delimiter == FALSE) – Johnish
whoops! Es tut uns leid. Anfängerfehler. Danke @Johnish. Ich werde es sofort korrigieren. –
Dies ist eine verbesserte Version für leere Zeilen und zusätzliche Leerzeichen und Tabulatoren ...
Klasse 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;
}
} >
Aufruf im Controller:
$this->load->library('csvreader');
$import_csv_data = $this->csvreader->csv_to_array($path);
print_r($import_csv_data);
exit;
- 1. Welches ORM für Codeigniter?
- 2. Wiki-Anwendung für CodeIgniter?
- 3. Einstellung BaseURL für Codeigniter
- 4. Datamapper ORM für Codeigniter
- 5. Debug-Modus für CodeIgniter?
- 6. Änderungsbeleg Wurzel für codeigniter
- 7. CRON-Job für Codeigniter
- 8. Templating Motor für Codeigniter
- 9. URL Codeigniter für mehrsprachige Website
- 10. Nginx Rewrite-Regel für CodeIgniter
- 11. Login-System für CodeIgniter 3.0
- 12. Netbeans-Code-Vervollständigung für CodeIgniter
- 13. CodeIgniter Funktion für die Rückgabe spezieller Dropdown
- 14. Codeigniter, Best Practice für die sichere Suche
- 15. Backend und Frontend für eine Anwendung - Codeigniter
- 16. Codeigniter wie für E-Mails Vorlage html
- 17. Nginx conf für codeigniter Folge 404
- 18. Codeigniter form_dropdown Ausgabe für Wert und CSS
- 19. "SELECT TOP 1" Gleichheit für Codeigniter?
- 20. Cropping Bilder in CodeIgniter für FPDF Ausgabe
- 21. CodeIgniter: Tipps für die Verwendung von Vorlagen
- 22. Code für Login-Formular in Codeigniter
- 23. Codeigniter - wie Datenbankzwischenspeicherung für Sitzungen zu vermeiden
- 24. CodeIgniter Standard Controller Routing für mehrsprachige Website
- 25. codeigniter Prüfung für Benutzersitzung in jedem Controller
- 26. Cron Job funktioniert nicht für Codeigniter 2.2.5
- 27. Werte in Codeigniter für bestimmten Benutzer bearbeiten
- 28. PHP Codeigniter: set Portnummer für MySQL-Konfiguration
- 29. Erstellen Sie benutzerdefinierte Ausnahmeklasse für Codeigniter
- 30. ModRewrite funktioniert nicht für Codeigniter-Site
Thx Raheel, hast du das implementiert, um csv in die Datenbank einzugeben? –
ja übergeben Sie einfach das '$ result' an die Datenbanktabelle oder bilden Sie ein Array nach Ihren Anforderungen. –