gpt4 book ai didi

php - 在 php 中将 csv 文件导入 mysql - 如何忽略空行?

转载 作者:行者123 更新时间:2023-11-28 23:21:36 24 4
gpt4 key购买 nike

如果我尝试导入 csv 文件,所有空行也会被导入。

我有一个采用 csv 文件的表格

下面是表单 Action 代码

$file = $_FILES['file']['tmp_name'];
$allowedExts = array("csv");
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);

if (!in_array($extension, $allowedExts)) {
$this->session->set_flashdata('msg', 'Please upload a csv file format.');
}
else {
$handle = fopen($file, "r");
$c = 0;
$flag = true;
while(($filesop = fgetcsv($handle, 0, ",")) !== false)
{
if($flag) { $flag = false; continue; } //to skip the title row

if($filesop != NULL ) { //CONDITION TO CHECK EMPTY ROWS (DOES not work..)

$data[] = array(
'id'=>0, //uploader user id
'field1' => (isset($filesop[14]) ? $filesop[14] : "" ),
'field2' => (isset($filesop[15]) ? $filesop[15] : "" ),
'field3' => (isset($filesop[1]) ? $filesop[1] : "" ),
'field4' => (isset($filesop[13]) ? $filesop[13] : "" ),
'field5' => (isset($filesop[6]) ? $filesop[6] : "" ),
'field6' => (isset($filesop[2]) ? $filesop[2] : "" ),
'field7' => (isset($filesop[5]) ? $filesop[5] : "" ),
'field8' => (isset($filesop[3]) ? $filesop[3] : "" ),
'field9' => (isset($filesop[4]) ? $filesop[4] : "" ),
);
}
}
echo "<pre>";
print_r($data);
exit;

请帮我解决,我该怎么做才能不导入空行

最佳答案

我会使用 array_filter 从数组中删除空元素,然后检查是否还有剩余。

while(($filesop = fgetcsv($handle, 0, ",")) !== false){

$empty_filesop = array_filter( array_map('trim', $filesop));

if( !empty( $empty_filesop ) ){

.....
}
}

Array map with trim,将修剪数据以删除带有空格的行,例如 ,{space}, 可以这样想:

  foreach( $empty_filesop as &$item ) 
$item = trim( $item );

此外,请注意 PHP 将一些您可能不认为是空的东西视为空,并将使用标准 array_filter 将它们删除,例如 0 中的 ,0,或者 array( 0, 'blah' ) 带有 0 的元素将被删除。如果您需要更高的准确性,您可以这样做:

 $empty_filesop = array_filter(
array_map('trim', $filesop),
function( $item ){
return strlen( $item ); //return the string length of $item ( 0 is false > 0 is true )
}
);

如果你依赖于元素位置,如果有空行,它会改变,所以复制它来检查。例如使用 $empty_filesop 这样你就不会用过滤器改变实际的行......

http://php.net/manual/en/function.array-filter.php

http://php.net/manual/en/function.array-map.php

http://php.net/manual/en/function.trim.php

对于 header ,这样做(我不知道原始 key ):

$headers = false;
$order = ['id'=>0, 'org3'=>'', 'org2'=>'', 'org1'=>''];
while(($filesop = fgetcsv($handle, 0, ",")) !== false)
{
if(!$headers) { $headers = $filesop; continue; }

$empty_filesop = array_filter( array_map('trim', $filesop));

if( !empty($empty_filesop)){
//check for empty rows
if( count( $headers ) == count($filesop) ) {
//check for rows with extra or missing delimiters.
$data[] = array_replace( $order, array_combine( $headers, $filesop)); //combine with original headers, and replace the data in the 'order row' to re-order.
}else{
//row is missing or has extra delimiters.
}
}
}

关于php - 在 php 中将 csv 文件导入 mysql - 如何忽略空行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41373248/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com