Привет всем, у меня проблемы с правильным вложением циклов while для чтения из 2 массивов.У меня есть 2 файла, из которых я читаю содержимое:
file1: item_list.txt
string1 \n
string2 \n
string3 \n
...
file2: item+info.txt
string3 \t info1 \t info2 \t info3
string1 \t info7 \t info1 \t info4
string5 \t info2 \t info3
string2 \t info2 \t info4 \t info1
(значения разделены только новыми строками и вкладками, я добавил один пробел между символами здесь только для повышения читабельности) .
Я читаю из файлов, используя функцию fgetcsv () , и каждая строка из файла сохраняется в виде массива в переменную $ data .Я создал цикл while с условием (! Feof ($ fp)) для чтения файла до последней строки.Но я не могу должным образом вложить второй цикл.
Что я хочу сделать с этим: прочитать первую строку, найденную в file1, перейти к file2 и попытаться найти эту строку.Если есть совпадение, получите информационные данные для этой строки (все данные, или только одно, не имеют значения).Если совпадения нет, верните сообщение «нет совпадения».В любом случае, как только второй цикл завершит свою работу, мне нужно прочитать вторую строку в файле1 и снова выполнить поиск в файле2.Повторяйте это, пока есть что прочитать из файла 1.
Вот две версии моего кода, они не работают, и я не могу понять, почему.
//opening the files
$fp = fopen("$DOCUMENT_ROOT/test/item_list.txt", "r"); #raw item list
$pf = fopen("$DOCUMENT_ROOT/test/item+info.txt", "r"); #item+info list
//read from first file
$line=0;
while (!feof($fp)){
$line++;
$data1 = fgetcsv($fp, "1000", "\n");
$item1= $data1[0];
echo "line: $line. item_list: ".$item1; //just to see on screen what's happening
print_r($data1); //same here, just to see what's going on
echo"<br />";
//searching for string in file2
$row=0;
while (!feof($pf)){
$row++;
$data2 = fgetcsv($pf, "1000", "\t");
$item2= $data2[0];
echo "line: $row. item+info: ".$item2; //just checking things on screen
print_r($data2); //here too
echo "<br />";
//conditioning
//equal strings
if ($string1== $string2)
echo $data2[1]."<br />";
break;
}
}
fclose($fp);
fclose($pf);
это работало до тех пор, пока элементы в item_list.txt и item + info.txt рудерированы
точно так же (string1 \ nstring2 \ string3 ->
string1 \ tinfo1\ nstring2 \ tinfo2 \ nstring3 \ tinfo3 - но в моем случае этого никогда не произойдет, упорядочить подобные элементы невозможно)
Я пытался сделать это с помощью оператора foreach (), чтобы сделать это через массивы, норезультат чего-то, из чего я не могу разобраться.
while (!feof($fp)){
$data1 = fgetcsv($fp);
foreach ($data1 as $token1) {
while (!feof($pf)) {
$data2 = fgetcsv($pf);
foreach ($data2 as $value) {
explode ("\t", $value);
if ($token1 == $value[0])
echo $value[1];
}
break;
}
}
}