0

したがって、次のようにフォーマットされた2つのファイルがあります。

最初のファイル

adam 20 male
ben 21 male

2 番目のファイル

adam blonde
adam white
ben  blonde

私がやりたいことは、最初のファイルで adam のインスタンスを使用し、2 番目のファイルでそれを検索して属性を出力することです。

データはタブ「\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++;
            }
        }


}

2 番目のファイルをループして各行を取得し、最初のファイルと比較する方法がわかりません。

4

2 に答える 2

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) はクラッシュします。一方、すべての php プログラムの 90% は、file()人気があるため、この問題を抱えています :-)

于 2013-02-06T13:33:36.297 に答える
0

内側のループにタイプミスがあり、firstfile2 番目のファイルを読んでいるはずです。さらに、内側のループを終了した後、secondfileポインターを最初に巻き戻す必要があります。

于 2013-02-06T11:42:06.730 に答える