gpt4 book ai didi

php - 使用 PHP 获取 CSV 文件的第一行并使用数据创建 MySQL 表

转载 作者:行者123 更新时间:2023-11-29 01:12:42 28 4
gpt4 key购买 nike

我正在尝试获取一个相当大的 CSV 文件并将其插入 MySQL 数据库以供在项目中引用。我想使用文件的第一行使用正确的数据类型而不是每列的 varchar 创建表。最终目标是自动执行此过程,因为我有几个类似的文件,但每个文件在 CSV 文件中都有不同的数据和不同数量的“列”。我遇到的问题是 gettype() 为每一列返回“字符串”,而不是像我希望的那样返回 int、float 和 string。

平台是PHP 5,操作系统是ubuntu 8.04

到目前为止,这是我的代码:

<?php

// GENERATE TABLE FROM FIRST LINE OF CSV FILE

$inputFile = 'file.csv';
$tableName = 'file_csv';

$fh = fopen($inputFile, 'r');
$contents = fread($fh, 5120); // 5KB
fclose($fh);

$fileLines = explode("\n", $contents); // explode to make sure we are only using the first line.

$fieldList = explode(',', $fileLines[0]); // separate columns, put into array
echo 'CREATE TABLE IF NOT EXISTS `'.$tableName.'` ('."<br/>\n";
for($i = 0; $i <= count($fieldList); $i++)
{
switch(gettype($fieldList[$i])) {
case 'integer':
$typeInfo = 'int(11)';
break;
case 'float':
$typeInfo = 'float';
break;
case 'string':
$typeInfo = 'varchar(80)';
break;
default:
$typeInfo = 'varchar(80)';
break;
}
if(gettype($fieldList[$i]) != NULL) echo "\t".'`'.$i.'` '.$typeInfo.' NOT NULL, --'.gettype($fieldList[$i]).' '.$fieldList[$i]."<br/>\n";
}
echo ' PRIMARY KEY (`0`)'."<br/>\n";
echo ') ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;';

示例第一行: 1,0,0,0,0,0,0,0,0,0,0,0,0.000000,0.000000,0,0,0,,0,0,1,0,50,'记忆之语 (老)',

最佳答案

基于 Nouveau的代码你可以这样做

for($i = 0; $i <= count($fieldList); $i++)
{
if (is_numeric($fieldList[$i]))
{
if (strpos($fieldList[$i],'.') !== false){
$fieldList[$i] = (int)$fieldList[$i];
}else{
$fieldList[$i] = (float)$fieldList[$i];
}
}

switch(gettype($fieldList[$i])) {
case 'integer':
$typeInfo = 'int(11)';
break;
case 'float':
case 'double':
$typeInfo = 'float';
break;

case 'string':
$typeInfo = 'varchar(80)';
break;
default:
$typeInfo = 'varchar(80)';
break;
}
if(gettype($fieldList[$i]) != NULL) echo "\t".'`'.$i.'` '.$typeInfo.' NOT NULL, --'.gettype($fieldList[$i]).' '.$fieldList[$i]."<br/>\n";

}

这行得通,请注意在开关中添加了“case 'double':”,但可能有更好的方法来进行 int/float 检查,因为它们只适用于标准的英国/美国数字。

关于php - 使用 PHP 获取 CSV 文件的第一行并使用数据创建 MySQL 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/173498/

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