导入 CSV 时跳过标题或第一行
Posted
技术标签:
【中文标题】导入 CSV 时跳过标题或第一行【英文标题】:When import CSV skip header or first row 【发布时间】:2017-09-21 04:08:56 【问题描述】:我知道这是重复的问题。但我已经尝试了我在https://***.com/ 上找到的所有答案。
我认为在我的情况下,如果相同的日期匹配,则插入和更新数据,如果不是,则记录将更新。
下面是我的文件代码:
<?php
if ( isset( $_POST['submit'] ) && $_POST['upload-csv'] == 'upload' )
$error = array();
$success = array();
$filename = $_FILES['file']['name'];
$filetype = wp_check_filetype( $filename );
if ( $filetype['ext'] == 'csv' && $filetype['type'] == 'text/csv' )
$handle = fopen( $_FILES['file']['tmp_name'], "r" );
$row = 0;
$skip_row_number = array("1");
while ( ($data = fgetcsv( $handle, 1000, "," )) !== FALSE )
$data = array_map("utf8_encode", $data);
if ($row > 0)
$table_name = $wpdb->prefix . 'prayer';
$ipquery = $wpdb->get_results("SELECT * FROM `$table_name` WHERE `date` = '".$data[0]."'");
$query_res = $wpdb->num_rows;
// Check if same date data
if($query_res >=1)
$updateQuery = "UPDATE `$table_name` SET
`date` = '".$data[0]."',
`first_start` = '".$data[1]."',
`first_end` = '".$data[2]."',
`second_start` = '".$data[3]."',
`second_end` = '".$data[4]."',
`third_start` = '".$data[5]."',
`third_end` = '".$data[6]."',
`forth_start` = '".$data[7]."',
`forth_end` = '".$data[8]."',
`five_start` = '".$data[9]."',
`five_end` = '".$data[10]."',
`done` = '".$data[10]."'
WHERE `$table_name`.`date` = '".$data[0]."';";
$up_res = $wpdb->query($updateQuery);
else
$query = "INSERT INTO $table_name (date, first_start, first_end, second_start,
second_end, third_start, third_end, forth_start, forth_end, five_start, five_end, done)
VALUES ('".$data[0]."','".$data[1]."','".$data[2]."','".$data[3]."','".$data[4]."','".$data[5]."','".$data[6]."','".$data[7]."','".$data[8]."','".$data[9]."','".$data[10]."','".$data[11]."')";
$insert_res = $wpdb->query($query);
$row++;
fclose( $handle );
$success[] = 'Import done.';
else
$error[] = 'Please upload CSV file only';
?>
我已经尝试了以下跳过标题的答案:
Skip the first line of a CSV file
Import CSV, exclude first row
skip first line of fgetcsv method in php
帮我解决这个问题。
【问题讨论】:
您可以在while ( ($data = fgetcsv( $handle, 1000, "," )) !== FALSE )
上方调用fgetcsv( $handle, 1000, "," ))
行
在你开始 while 循环之前做一个简单的$data = fgetcsv( $handle, 1000, "," );
。这将读取并忽略文件的第一行
我已经尝试过,但同样的问题一次又一次。
【参考方案1】:
ParseCSV 是从 CSV 获取数据的最新且简单的方法,您可以轻松控制 CSV 中的数据。
你必须按照正确的路径添加库文件
e.g. require_once 'parsecsv.lib.php';
然后分别返回标题和数据。
$filename = 'abc.csv'; // path of CSV file or after upload pass temp path of file
$csv = new parseCSV();
$csv->auto($filename);
foreach ($csv->titles as $value):
$getcsvtitle[] = // get header in variable
endforeach;
foreach ($csv->data as $key => $row):
//$getdataasperrow = // get data row wise.
endforeach;
ParseCSV在添加库后以数组格式返回数据,因此您可以轻松分离标题和其他数据,并且兼容换行符和特殊字符以及我一直使用的它.
请参阅下面的链接以获取更多详细信息。
ParseCSV GitHub
【讨论】:
感谢您的回答,我会尝试上面的代码并相应地更新您。 @mageDev0688 np .:)以上是关于导入 CSV 时跳过标题或第一行的主要内容,如果未能解决你的问题,请参考以下文章