Php 如何分割csv文件,以便从中生成两个表?

Php 如何分割csv文件,以便从中生成两个表?,php,csv,Php,Csv,我需要从这个csv文件中创建2个表。我如何分割文件,在第二行之后 这就是csv文件的外观 我已将我需要的标记为标题。我不需要这些数据 台词 Palle\u nr;瓦伦默;秩序;操作员;Maskin_nr 1234;1234_2019_01_14_17_11_23;1234; 总氮;1234  名称;资料财产;标准类型 1) 高度130;;平均值(L)Y;;检验尺寸标量 这就是我的代码的外观。同样,我想让这段代码做的是在第二行之后分割csv文件。所以我有一张带托盘的桌子 还有一张有名字的桌子 i

我需要从这个csv文件中创建2个表。我如何分割文件,在第二行之后

这就是csv文件的外观

我已将我需要的标记为标题。我不需要这些数据 台词

Palle\u nr;瓦伦默;秩序;操作员;Maskin_nr

1234;1234_2019_01_14_17_11_23;1234; 总氮;1234

名称;资料财产;标准类型

1) 高度130;;平均值(L)Y;;检验尺寸标量

这就是我的代码的外观。同样,我想让这段代码做的是在第二行之后分割csv文件。所以我有一张带托盘的桌子 还有一张有名字的桌子

if (isset($_POST['btn-upload'])){

copy("$sourcepath/$latest_filename","$copy/$latest_filename");

$row = 1;
if (($openfile = fopen("$copy/$latest_filename", "r")) !== FALSE) {

    $csvuser->createPalleTable($latest_filename);
    while ($getpdata = fgetcsv($openfile, 1000, ";")) {
        $getpdata = array_map("utf8_encode", $getpdata);
        $totalp = count($getpdata);

        $row++;

        for ($i=0; $i < $totalp; $i++) {
            $pdata = implode(";", $getpdata);
            $palledata = explode(";", $pdata);
        }
        $csvuser->insertPalleTable($latest_filename,$palledata);
        }

///////// This is where i want the file to split ///////

     $header = fgetcsv($openfile, 1000, ";");
     $header = array_map("utf8_encode", $header);
     $totalheader = count($header);
     for ($i=0; $i < $totalheader; $i++) {
         $headerdata = implode(";", $header);
         $th = explode(";", $headerdata);
         }

   $csvuser->createCsvTable($latest_filename);
   while ($getdata = fgetcsv($openfile, 1000, ";")) {
   $getdata = array_map("utf8_encode", $getdata);
   $total = count($getdata);

   $row++;

   for ($c=0; $c < $total; $c++) {
        $csvdata = implode(";", $getdata);
        $fncsvdata = explode(";", $csvdata);
    }
     $csvuser->insertCsvTable($latest_filename,$fncsvdata);
    }
  }
}  
if(isset($\u POST['btn-upload'])){
复制($sourcepath/$latest_filename,“$copy/$latest_filename”);
$row=1;
if($openfile=fopen($copy/$latest_filename,r))!==FALSE){
$csvuser->createPalleTable($latest_filename);
而($getpdata=fgetcsv($openfile,1000,“;”)){
$getpdata=array\u map(“utf8\u编码”,$getpdata);
$totalp=count($getpdata);
$row++;
对于($i=0;$i<$totalp;$i++){
$pdata=内爆(“;”,$getpdata);
$palledata=explode(“;”,$pdata);
}
$csvuser->insertPalleTable($latest_filename,$palledata);
}
/////////这是我想要分割文件的地方///////
$header=fgetcsv($openfile,1000,“;”);
$header=数组映射(“utf8\U编码”,$header);
$totalheader=计数($header);
对于($i=0;$i<$totalheader;$i++){
$headerdata=内爆(“;”,$header);
$th=爆炸(“;”,$headerdata);
}
$csvuser->createCsvTable($last_filename);
而($getdata=fgetcsv($openfile,1000,“;”)){
$getdata=array_map(“utf8_编码”,$getdata);
$total=计数($getdata);
$row++;
对于($c=0;$c<$total;$c++){
$csvdata=内爆(“;”,$getdata);
$fncsvdata=分解(“;”,$csvdata);
}
$csvuser->insertCsvTable($fncsvdata);
}
}
}  
如果您需要完整的代码以便可以重新创建问题。然后我会上传它,但我认为它会有太多的代码


其他读取文件的方法也值得赞赏。我只需要能够分割文件。

在您的代码中有太多问题,但由于文件中的前四行是可预测的,因此您可以在不循环的情况下使用它们

if (isset($_POST['btn-upload'])){
    copy("$sourcepath/$latest_filename","$copy/$latest_filename");

    if (($openfile = fopen("$copy/$latest_filename", "r")) !== false) {

        $header1 = fgetcsv($openfile, 1000, ";"); // consume, but don't use

        $csvuser->createPalleTable($latest_filename);
        $csvuser->insertPalleTable($latest_filename, array_map("utf8_encode", fgetcsv($openfile, 1000, ";")));

        $delimiting_row = fgetcsv($openfile, 1000, ";"); // consume, but don't use 

        $header2 = fgetcsv($openfile, 1000, ";"); // consume, but don't use

        $csvuser->createCsvTable($latest_filename);
        while ($getdata = fgetcsv($openfile, 1000, ";")) {
            $csvuser->insertCsvTable($latest_filename, array_map("utf8_encode", $getdata));
        }
    }
}

这完全没有经过测试(并且是从我的手机上发布的)。

你可以在这篇文章中找到一个可能的解决方案:这篇文章的问题在于我不需要跳过标题。我需要从我的csv文件中创建两个表。每个标题下是否有可变数量的数据行?不是第一行,而是第二行。是的。如果我可以在第二行之后停止读取该文件,我认为这会起作用。然后重新开始读取其余的数据。但不知道怎么做。你能告诉我为什么这样做吗?试图回显变量,但$header2没有显示任何内容。我想是空行。你能确认吗?:)再次感谢!返回一个数组,因此
echo
不起作用。您可以使用胶水内爆来回音,也可以使用
var\u export()
print\u r()
var\u dump()
来输出阵列数据。调用
fgetcsv()
时,它提取一行/行,并前进“指针”。手动进行这些调用(在循环之外)使您能够逐步遍历已知行,直到到达具有可变数据行的第二部分数据。非常感谢您的帮助!:)