如何传递这两个数组?

时间:2012-08-23 10:02:48

标签: php

test.php目录与csv和文本文件相同。现在我想将所有csv file nameall the text name传递给以下if条件。即,用所有csv文件名替换one.csv。用所有txt文件名替换one.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文件并提取它的一些内容,然后将它们放入文本文件中。谢谢

2 个答案:

答案 0 :(得分: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...
    }
}

答案 1 :(得分:0)

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

尝试这样的事情:

$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。否则,如果您只是想使用它们,那么您可以遍历单独的数组并以这种方式从中获取信息。