所以我有两个文件,格式如下:
第一个文件
adam 20 male
ben 21 male
第二档
adam blonde
adam white
ben blonde
我想做的是在第一个文件中使用adam实例,并在第二个文件中搜索它并打印出属性。
数据由标签“\ t”分隔,所以这就是我到目前为止。
$firstFile = fopen("file1", "rb"); //opens first file
$i=0;
$k=0;
while (!feof($firstFile) ) { //feof = while not end of file
$firstFileRow = fgets($firstFile); //fgets gets line
$parts = explode("\t", $firstFileRow); //splits line into 3 strings using tab delimiter
$secondFile= fopen("file2", "rb");
$countRow = count($secondFile); //count rows in second file
while ($i<= $countRow){ //while the file still has rows to search
$row = fgets($firstFile); //gets whole row
$parts2 = explode("\t", $row);
if ($parts[0] ==$parts2[0]){
print $parts[0]. " has " . $parts2[1]. "<br>" ; //prints out the 3 parts
$i++;
}
}
}
我无法弄清楚如何遍历第二个文件,获取每一行,并与第一个文件进行比较。
答案 0 :(得分:0)
你在内循环中有一个拼写错误,你正在阅读firstfile
并且应该正在阅读第二个文件。此外,在退出内循环之后,您需要将secondfile
指针重新加回到开头。
答案 1 :(得分:0)
这个怎么样:
function file2array($filename) {
$file = file($filename);
$result = array();
foreach ($file as $line) {
$attributes = explode("\t", $line);
foreach (array_slice($attributes, 1) as $attribute)
$result[$attributes[0]][] = $attribute;
}
return $result;
}
$a1 = file2array("file1");
$a2 = file2array("file2");
print_r(array_merge_recursive($a1, $a2));
它将输出以下内容:
Array (
[adam] => Array (
[0] => 20
[1] => male
[2] => blonde
[3] => white
)
[ben] => Array (
[0] => 21
[1] => male
[2] => blonde
)
)
然而,如果它们很大(> 100MB),那么这个文件会同时读取两个文件并且会崩溃。另一方面,90%的php程序都存在这个问题,因为file()
很受欢迎: - )