从csv文件中读取第一行并根据它创建表格(csv文件字段)。

4

从CSV文件中读取第一行并根据它(CSV文件字段)自动在MySQL中创建表格。寻找PHP脚本?我尝试过以下代码:

 <?php

$arr = array(array(),array());
$num = 0;
$row = 0;
$handle = fopen("./contacts.csv", "r");


while($data = fgetcsv($handle,1000,",")){   
    $num = count($data);
    for ($c=0; $c < $num; $c++) {
            $arr[$row][$c] = $data[$c];
    }
    $row++;
}


$con = mysql_connect('localhost','root','');
mysql_select_db("excel_database",$con);

for($i=1; $i<$row; $i++){
$sql = "INSERT INTO contacts VALUES ('".$arr[$i][0]."','".$arr[$i][1]."','".$arr[$i][2]."','".$arr[$i][3]."','".$arr[$i][4]."','".$arr[$i][5]."')";
mysql_query($sql,$con);
}

?>

有什么问题吗? - Mohammad Tomaraei
1
@reza..在创建表格时遇到问题...如果我已经创建了表格,数据就被导入了。但是我正在寻找一种自动使用cvs文件字段创建表格的方法。 - AWA
创建表有什么问题吗? - manuell
@manuell..自动从Excel文件创建带有字段的表格。直接创建表格不是问题,但我正在寻找一种脚本,它可以读取Excel文件并根据其标题字段创建表格。谢谢。 - AWA
请尝试此链接 链接 - kinsley kajiva
5个回答

4
这是你问题的一半。
<?php
    $row = 1;
    if (($handle = fopen("ab.csv", "r")) !== FALSE) {
        while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
            $num = count($data);
            echo "<p> $num fields in line $row: <br /></p>\n";
            $row++;
            for ($c=0; $c < $num; $c++) {
                echo $data[$c] . "<br />\n";

            }
        }

        fclose($handle);
    }
    ?>

4

稍微修改一下你的脚本,这样就可以根据csv头行创建表格:

    $sql[] = array();
    $handle = fopen($file, "r");

    $header = fgetcsv($handle,1000,",");
    if($header){
        $header_sql = array();
        foreach($header as $h){
            $header_sql[] = '`'.$h.'` VARCHAR(255)';
        }
        $sql[] = 'CREATE TABLE `imported_csv` ('.implode(',',$header_sql).')';

        while($data = fgetcsv($handle,1000,",")){   
            $sql[] = "INSERT INTO imported_csv VALUES ('".implode("','",$data)."')";
        }
    }        

    $con = mysql_connect('localhost','root','');
    mysql_select_db("excel_database",$con);
    foreach($sql as $s){
        mysql_query($s,$con);
    }

4

array_shift(file('filename.csv'))会给你filename.csv文档的第一行。


你是对的,我犯了一个错误,现在我把 file_get_contents 改成了 file,这个应该可以工作。 - Friedrich

3
这里有一个函数可以给你返回一个数组:fgetcsv。在该页面的示例#1中有一个基本脚本。
表格只需要循环遍历内容即可...
啊哈,我终于解析了“根据mysql自动创建表格”的意思并理解了。把fgetcsv返回的数组用来创建你的sql命令即可,例如'...values (' . implode(',', $results_of_fgetcsv) . ')...'

2
如果你想将表格数据在HTML中可视化,可以使用PHP创建一个表格,并读取CSV数据文件的第一行作为表头。我使用了以下函数,你可以试一下!
function build_table($source){
$data = array();
$file = fopen($source, 'r');
while (($result = fgetcsv($file,0,";")) !== false){$data[] = $result;}
fclose($file);


//Now process the data and create table
$data_rows=@count($data[0]); //from the first row get the header name
$colum_trail="";
//Create the header part
for($i=0; $i<$data_rows;$i++){
$cell=$data[0][$i]; //each header
$colum_trail.="<th>$cell</th>";    
}

////Create the table body contents     
$table_cells="";

for($i=1; $i<count($data);$i++){
$table_cells.="<tr>";       
$cell=$data[$i];

foreach($cell as $cell_value){
$cell_v=$cell_value;
$table_cells.="<td>$cell_v</td>";
}
$table_cells.="</tr>";
}

$table="<table><tr>$colum_trail</tr>$table_cells</table>";
echo "<style>td {border-bottom: 2px solid black;}</style>";
echo $table;
}

那么你只需要在那段代码后面调用该函数,像这样:

然后你所需做的就是在那段代码后面调用该函数,像这样:

build_table("source.csv");  //then call the file you want to create table

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接