0

循环有问题。

我有一个看起来像这样的文本文件

一个西克雷拉

安维拉

一个索纳斯

一个索尔德

一个西斯波尼

一个塞古德

一个埃尔塔特

AN Sant Julia de Loria

AN 圣琼德卡塞勒斯

除了我有超过 200 万行之外。

我需要把它变成一个插入的 sql 请求

在过去的 12 个小时里,我一直在尝试但没有成功

我试过这样

<?php
$file = "cities.txt";
$file_w = "cities.sql";
$f = fopen($file, "r");
$nf = fopen($file_w, "w+");

for($l = 0; $l<2; $l++){


$line = fgets($f);
$ex = preg_split('/\s+/', $line);

foreach($ex as $k => $v){

    echo $ex[0].' '. $ex[1];
    echo '<br>';

    $fw = fwrite($nf, "('" . $ex[0] . "','"  . $ex[1] . "')\r\n");

}
}






fclose($f);
fclose($nf);
?>

甚至像这样

$file = "cities.txt";
$file_w = "cities.sql";
$f = fopen($file, "r");
$nf = fopen($file_w, "w+");

while ($line = fgets($f, 4096000))  {
    // echo $line;


$ex = preg_split('/\s+/', $line);
// var_dump($ex);die();
foreach($ex as $k => $v){

    // echo $ex[0].' '. $ex[1];
    // echo '<br>';

    $fw = fwrite($nf, "('" . $ex[0] . "','"  . $ex[1] . "')\r\n");



}
}





fclose($f);
fclose($nf);

但两次我的书面文件中都有这个

('AN','Xixerella')

('AN','Xixerella')

('AN','Xixerella')

('AN','维拉')

('AN','维拉')

('AN','维拉')

每行重复 3 次,我不知道为什么。

在此先感谢您的帮助

4

1 回答 1

0

因为你有 foreach 循环嵌套在你的 while 循环中,你不必要地将你的行分成太多的部分,你的逻辑是有缺陷的。

<?php
$infile = "cities.txt";
$outfile = "cities.sql";
$rh = fopen($infile, "r");
$wh = fopen($outfile, "w+");

//this has to change because a blank line or a line that is simply '0' will break the loop
while( ($line = fgets($rh, 4096000)) !== false ) {
    $parts = preg_split('/\s+/', $line, 2); //limit to splitting into TWO parts, state and city.
    $state = $parts[0];
    $city = preg_replace("/'/", '&#39;', $parts[1]); //replace stray apostrophes
    $output = sprintf("('%s','%s')\r\n", $state, $city)
    fwrite($wh, $output)
}

fclose($rh);
fclose($wh);
于 2013-08-01T00:12:01.227 回答