gpt4 book ai didi

php - 使用列信息将 csv 文件导入数据库

转载 作者:行者123 更新时间:2023-11-29 02:55:11 25 4
gpt4 key购买 nike

下面是我一直在处理的示例表,

表 1

╔════╦══════════════╦═══════════╗════════════════════╗ 
║ id ║ file_id ║fieldname ║ from_column_number ║
╠════╬══════════════╬═══════════╣════════════════════╬
║ 1 ║ 5566533 ║ mid ║ 4 ║
║ 2 ║ 5566533 ║ old ║ 2 ║
║ 3 ║ 5566533 ║ fossil ║ 1 ║
║ 4 ║ 3232534 ║ old ║ 4 ║
║ 5 ║ 3232534 ║ mid ║ 3 ║
║ 6 ║ 3232534 ║ new ║ 2 ║
║ 7 ║ 3232534 ║ fossil ║ 1 ║
╚════╩══════════════╩═══════════╝════════════════════╝

我有 CSV 文件,它们的 ID 在 file_id 列中,它们的标题名称和它们出现在列的 fieldname 文件中的顺序> 和 from_column_number。即,在上面的例子中,我显示了两个文件的 file_id 5566533 和3232534.

他们的标题顺序为

5566533:

 fossil old mid 

3232534:

 fossil new mid old

我需要将文件加载到下表中,使用上述信息重新安排每个文件的加载方式

例如,在上述情况下,id 为 5566533 的文件在其第四个位置有字段 mid

表2

╔════╦══════════════╦═══════════╗════════════════════╗ 
║ id ║ mid ║old ║ fossil ║
╠════╬══════════════╬═══════════╣════════════════════╬
║ 1 ║ 422342343 ║ 12222 ║ 342342 ║
║ 2 ║ 234234 ║ 43234 ║ 3243 ║
║ 3 ║ 345435355445 ║ 234234 ║ 32432 ║
║ 4 ║ 3455544534 ║ 2343245 ║ 4234 ║
║ 5 ║ 345345544454 ║ 432234 ║ 324545 ║
║ 6 ║ 554345345 ║ 34243 ║ 453242 ║
║ 7 ║ 77w345544533 ║ 34234455 ║ 5245345 ║
╚════╩══════════════╩═══════════╝════════════════════╝

为此,我只能使用纯 SQL 和一些 PHP。g

最佳答案

我想我明白你在问什么。首先,您可以将字段映射表转换为数组。我已经手动完成了以下操作,但它应该可以证明您正在尝试做什么:

// Load some sample data regarding input file field ordering
// ---------------------------------------------------------
$csvinfo = array();

$csvinfo[5566533]['mid'] = 4;
$csvinfo[5566533]['old'] = 2;
$csvinfo[5566533]['fossil'] = 1;

$csvinfo[3232534]['old'] = 4;
$csvinfo[3232534]['mid'] = 3;
$csvinfo[3232534]['new'] = 2;
$csvinfo[3232534]['fossil'] = 1;

有了字段映射信息,您可以遍历文件列表,加载它们,然后使用字段映射信息提取您关心的数据:

// Process each of the file names loaded into csvinfo
// --------------------------------------------------
echo "Processing input files<br>\n";
foreach ($csvinfo as $fileid => $fldmap)
{
$raw = @file_get_contents("$fileid.csv");
if ( !strlen($raw) )
die("ERROR: Unable to load $fileid.csv contents!\n");
$data = explode("\n",$raw);

$i=0;
echo "<br>\n";
echo "Importing from $fileid.csv<br>\n";

foreach ($data as $line)
{
// Skip header line
// ----------------
if ( !$i++ || !strlen(trim($line)) )
continue;

$flds = explode(',',$line);
$midval = trim($flds[$fldmap['mid']-1]);
$oldval = trim($flds[$fldmap['old']-1]);
$fosval = trim($flds[$fldmap['fossil']-1]);

// Write fields to table here
// --------------------------
echo "... line " . ($i-1) . " $line with fossil $fosval mid $midval old $oldval<br>\n";
;
}

echo ($i-1) . " lines imported from $fileid.csv<br>\n";
}

上面的代码会生成如下调试信息:

Processing input files

Importing from 5566533.csv
... line 1 f812, o998, b234, m1892 with fossil f812 mid m1892 old o998
... line 2 f915, o123, b454, m9817 with fossil f915 mid m9817 old o123
2 lines imported from 5566533.csv

Importing from 3232534.csv
... line 1 f179, n723, m886, o912 with fossil f179 mid m886 old o912
... line 2 f791, n237, m868, o129 with fossil f791 mid m868 old o129
... line 3 f917, n372, m688, o291 with fossil f917 mid m688 old o291
3 lines imported from 3232534.csv

这是 3232534.csv 文件(用垃圾数据手动创建):

fossil, new, mid, old
f179, n723, m886, o912
f791, n237, m868, o129
f917, n372, m688, o291

我不会暗示代码特别健壮或类似的东西。但是,如果我正确解释了您的问题,这就是一个起点。

关于php - 使用列信息将 csv 文件导入数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31335078/

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