Php CodeIgniter的CSV导入库
需要将csv或xls导入到使用CodeIgniter创建的应用程序中。这里有图书馆吗?感谢您的建议。这里有一个简单的方法。我不知道人们做什么,但我用这个 这是我的csv阅读器库Php CodeIgniter的CSV导入库,php,csv,codeigniter-2,helper,xls,Php,Csv,Codeigniter 2,Helper,Xls,需要将csv或xls导入到使用CodeIgniter创建的应用程序中。这里有图书馆吗?感谢您的建议。这里有一个简单的方法。我不知道人们做什么,但我用这个 这是我的csv阅读器库 <?php if (!defined('BASEPATH')) exit('No direct script access allowed'); class CSVReader { var $fields; /** columns names retrieved after par
<?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;
}
}
?>
这就是我们的观点
<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>
身份证件
名称
简短描述
长描述
地位
父ID
参考资料这是raheel shan接受答案的改进版本-我编辑了他的答案,但我的编辑被拒绝,但这是一个重要的改变 分析每个数据行时,在逗号上使用
explode()
是不明智的,因为这不会处理包含逗号的引号包围的字符串。Explode将这些字符串拆分为子字符串,并在$values
中提供额外的数组元素,因此此检查失败:
if (count($keys) == count($values)) {
相反,PHP有一个专门构建的方法来处理这个问题。我已相应地更新了原始答案代码
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 = 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;
}
}
?>
这是一种观点:
<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>
身份证件
名称
简短描述
长描述
地位
父ID
别介意,我刚刚修改了ajmedway的库,添加了分隔符,以防您想从TSV或管道分隔文件中获取数据。如果你想要普通的老房子,他的就行了
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{
var$fields;/**解析后检索的列名称*/
var$separator=';';/**用于分解每行的分隔符*/
变量$enclosure='“;/**用于装饰每个字段的enclosure*/
var$max_row_size=4096;/**用于解码的最大行大小*/
函数parse_file($p_Filepath,$delimiter=FALSE){
$file=fopen($p_Filepath,'r');
$this->fields=fgetcsv($file,$this->max\u row\u size,$this->separator,$this->enclosure);
如果($delimiter==FALSE)
{
$keys=str_getcsv($this->fields[0]);
$i=1;
而($row=fgetcsv($file,$this->max_row_size,$this->separator,$this->enclosure))!=false){
如果($row!=null){//跳过空行
$values=str_getcsv($row[0]);
if(计数($keys)=计数($values)){
$arr=array();
对于($j=0;$jfields[0],$delimiter);
$i=1;
而($row=fgetcsv($file,$this->max_row_size,$this->separator,$this->enclosure))!=false){
如果($row!=null){//跳过空行
$values=str_getcsv($row[0],$delimiter);
if(计数($keys)=计数($values)){
$arr=array();
对于($j=0;$j
这是一个改进版,用于空行、额外空格和制表符
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;
}
函数csv_到_数组($Filepath)
{
//获取csv文件内容
$csvData=文件获取内容($Filepath);
//删除空行
$csvData=preg_replace(“/(^[\r\n]*.[\r\n]+)[\s\t]*[\r\n]+/”、“\r\n”、$csvData);
//数组格式中的字符串转换并删除双引号(“”)
$array=array();
$array=$this->escape_字符串(preg_split('/\r\n | \r\n/',$csvData));
$new_content_in_array=array();
如果($数组)
{
//获取数组键
$array_keys=array();
$array_keys=array_过滤器(array_映射('trim',分解(';',$array[0]));
//获取数组值
$array_values=array();
对于($i=1;$i$val)
{
对于($j=0;$j呼叫控制器:
$this->load->library('csvreader');
$import_csv_data = $this->csvreader->csv_to_array($path);
print_r($import_csv_data );
exit;
Thx Raheel,您也实现了将csv输入到数据库中吗?是的,只需将$result
传递到数据库表或根据您的要求形成一个数组。仍然工作得很好。非常感谢。@MuhammadRaheel您分配了这一行$this->csvreader->parse_file('Test.csv');我应该在计算机中使用的csv文件我累了,我得到了一个类似于以下的错误:调用成员函数parse_file(),返回null,另一个错误是消息:Undefined property:csv_import::$CsvReader@Jack它清楚地表明它为空。您应该提供有效的路径。对于第二个问题,您是否确定已正确加载库。如果($delimiter=FALSE)因为您正在将$delimiter设置为FALSE,并且没有检查它的状态。应该是如果($delimiter==FALSE)哇!对不起。新手出错。谢谢@Johnish。我会立即更正它。
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;