-3

test.php目录与 csv 和文本文件相同。现在我想将所有csv file name和传递all the text name 给以下if条件。即,替换one.csv为所有 csv 文件名。替换one.txt为所有的txt文件名。

if (($handle = fopen("one.csv", "r")) !== FALSE && ($handle2 = fopen("one.txt", 'a')) !== FALSE) { ...}

以下是我的代码。运行代码后,我发现文本文件中的所有内容都是一样的。它循环了太多次。如何更改代码?谢谢。

    $files = glob("./*.csv");
    $files1 = glob("./*.txt");
    foreach($files as $filepath){
    foreach($files1 as $filepath1){


   $row = 1;
if (($handle = fopen("one.csv", "r")) !== FALSE && ($handle2 = fopen("one.txt", 'a')) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        if($row > 1) {
            $url = $data[8];
            foreach($result[0] as $url){
                fwrite($handle2, $url."\r\n");
            }

        }
        $row++;
    }
    fclose($handle);
    fclose($handle2);
}

    }
    }

txt 文件为空。现在,我想读取 csv 文件并提取其中的一些内容,然后将它们放入文本文件中。谢谢你

4

2 回答 2

0

您不需要 glob .txt 文件,只需 glob csv,并将扩展名替换.csv.txt

$csv = glob('./*.csv');
foreach($csv as $file) {
   $txt = preg_replace('#\.csv$#', '.txt', $file);
   if (($handle = fopen($file, "r")) !== FALSE && ($handle2 = fopen($txt, 'a')) !== FALSE) {
    //your code...
    }
}
于 2012-08-23T10:14:10.557 回答
0

问题是你在一个循环中有一个循环。因此,每次第一个循环循环时,它都会在第二个循环中再次执行所有操作。

尝试这样的事情:

$csv_files = glob("./*.csv");
$txt_files = glob("./*.txt");

$csvs = array();
foreach($csv_files as $fp){
    $csvs[] = fopen($fp, "r");
}

$txts = array();
foreach($txt_files as $fp){
    $txts[] = fopen($fp, "r");
}

var_dump($csvs); // all csv file info
var_dump($txts); // all txt file info

如果您愿意,您可以测试以查看!== false单独的循环。否则,如果您只想使用它们,那么您可以遍历单独的数组并以这种方式从中获取信息。

于 2012-08-23T10:14:14.050 回答