爆炸整个数组,更改某些列中的所有值,然后内爆回旧数组

时间:2013-10-22 16:52:27

标签: php sql arrays explode

我有一个数组,其中包含来自txt文件的行,我需要将其插入到sql表中,但是24列中的4列(所有值/ t间隔)都是日期,但最后有时间等所有需要缩短15个字符,所以substr。

所以我尝试了很多方法来改变文件中的值然后插入它们,但它似乎不像我当前的代码那样工作:

$lines = file('F:/xamptest/htdocs/UniProject/upload/Amazon output.txt');
foreach($arr as $line) 
{
    $arr1 = explode("\t", $line);  
    $arr1[2] = substr($arr1[2], 0, -15); 
    $arr1[3] = substr($arr1[3], 0, -15);
    $arr1[4] = substr($arr1[4], 0, -15);
    $arr1[5] = substr($arr1[5], 0, -15);
    $arri = implode("\t",$arr1);
    file_put_contents('upload/ImportLine.txt', $arri);
    mysql_query ("LOAD DATA INFILE 'F:/xamptest/htdocs/UniProject/upload/Amazon output.txt' INTO TABLE imported_orders FIELDS TERMINATED BY '\t'", $conn);
}

哪个应该改变行中的日期,将其保存到txt文件然后将其插入表中并循环每行。但所有这一切都是插入文件的最后一行,所以它循环,但然后只是覆盖自己。 或者我的方法太长,并且涉及到表和一个列出所有24个列和值的大量sql插入。

我的观点

所以我想知道我是否能以某种方式爆炸整个数组,其中包含来自日期的文件行和质量子数据集,然后将其恢复为旧的数组行格式,将其放回文件中并且只是LOAD DATA INFILE从那以后。由于加载原始文件有效,但日期不能作为日期类型,因为它们是“2013-03-11T20:35:33 + 00:00”。例如。

此外,如果有一种方法可以简单地插入一个变量,该变量作为/ t审议值而不必使其成为一个数组,并说明eachColumn = andValue [2]甚至更好。

非常感谢。

2 个答案:

答案 0 :(得分:0)

也许将最后两行移到循环之外?

file_put_contents('upload/ImportLine.txt', $arri);
mysql_query ("LOAD DATA INFILE 'upload/ImportLine.txt' INTO TABLE imported_orders FIELDS TERMINATED BY '\t'", $conn);

您还需要更改此内容:

$arri = implode("\t",$arr1);

对此:

$arri[] = implode("\t",$arr1);

只是一个猜测,但也许:     LOAD DATA INFILE'upload / ImportLine.txt'

答案 1 :(得分:0)

不要覆盖尝试使用:

file_put_contents('upload/ImportLine.txt', $arri, FILE_APPEND | LOCK_EX);