test.php
目录与csv和文本文件相同。现在我想将所有csv file name
和all 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文件并提取它的一些内容,然后将它们放入文本文件中。谢谢
答案 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
。否则,如果您只是想使用它们,那么您可以遍历单独的数组并以这种方式从中获取信息。