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文件。所以我有一张带托盘的桌子 还有一张有名字的桌子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
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()
时,它提取一行/行,并前进“指针”。手动进行这些调用(在循环之外)使您能够逐步遍历已知行,直到到达具有可变数据行的第二部分数据。非常感谢您的帮助!:)