беру из файла 2 числа и сравниваю их, сравнивает некорректно

nvrskozzy

Новичок
беру из файла 2 числа и сравниваю их, сравнивает некорректно

Подскажите, не пойму что за фигня, ниже код дам.
У меня 2 файла текстовых, в них id из цифр, код должен сравнивать каждый id из 1 файла со всеми id во втором файле, и если id равны то выводить собственно надпись, 2 = 2 например, но он не находит вообще одинаковых, я уже внаглую написал в файлах по 1 idшнику одинаковому, нифига :( не понимает что они равны, подскажите в чём проблема.

fh = fopen("ID2.txt", "r+"); //открываем 1 файл
$fh2 = fopen("ID.txt", "r+"); //открываем 2 файл

while(!feof($fh)) // пока не закончится 1 файл
{
$line = fgets($fh); // строка с 1 файла

while(!feof($fh2)) // пока не закончится 2 файл
{
$line2 = fgets($fh2); // строка 2 файла

if ($line==$line2) // если строки равны // вот тут сравниваются цифры, нифига не пашет, одинаковые цифры но он не понимате этого :(
{
echo "$line равно $line2";
}

}
rewind($fh2);
}
 

Nicholas

Новичок
вместо
if ($line==$line2)
сделайте
var_dump($line)
var_dump($line2)

и подумайте над кодом.
Уж очень он некрасивый.
(подсказка. копните в сторону функции file())
 

Zetruger

ivan.chistyakov.name
ИМХО file лучше использовать
только не забывать о

FILE_IGNORE_NEW_LINES
FILE_SKIP_EMPTY_LINES

а также помнить что тип будет стринг
у элементов массива
 

FB3

Новичок
Я бы вообще содержимое файлов в массивы загрузил, если нужно полностью сравнить их. Один элемент - одна строчка.
 

nvrskozzy

Новичок
В общем узнал я о settype(), перевёл в интеджер содержимое и всё заработало.. Но видимо прийдётся в массив загонять всё равно содержимое, ибо мне с файла надо удалять ненужные id по ходу.. но тогда вылазит ошибка в строке с while (!feof)
 

Фанат

oncle terrible
Команда форума
Опять спор тупоконечников с тупоконечниками.
Nicholas, Crys, Zetruger заведите себе собственный фыорум, и там устраивайте диспуты на тему, какой командой прочитать две строчки из файла.

nvrskozzy, если возникает ошибка, то её надо исправить.
 

FB3

Новичок
nvrskozzy, а зачем у тебя вложенные циклы?
Я бы писал в третий файл нужные id и потом его переименовывал.
 

nvrskozzy

Новичок
Я исправил... переписал, терь через массивы всё делается, но блин снова теперь не пашет, не находит одинаковых :(

fh = file("ID2.txt"); // загоняем в массив 1 файл
$fh2 = file("ID.txt"); // загоняем в массив 2 файл
$vfh=count($fh);
$vfh2=count($fh2); //узнаём количество ячеек в массиве

for ($q=0;$q>$vfh;$q++) // пока не закончится 1 файл
{
$line = $fh[$q]; // строка с 1 файла

for ($q2=0;$q2>$vfh2;$q2++) // пока не закончится 2 файл
{
$line2 = $fh[$q2]; // строка 2 файла

settype($line, "integer"); // меняем тип
settype($line2, "integer");

if ($line==$line2) // если строки равны
{
unset($line[$q]); // удаляем одинаковые ячейки // однако они не удаляются!
unset($line2[$q2]);
echo "АРА";
}
}
rewind($fh2);
}
 

dimagolov

Новичок
скопируй реальный код, но прежде посмотри на него сам, что ты сравниваешь, а что удаляешь
 

Nicholas

Новичок
пара замечаний по коду:

вместо settype($line, "integer");
лучше пользовать $line = (int)$line;

unset($line[$q]); - отлично удаляет елемент массива,
НО.
ответьте на вопрос, после удаления элемента массива,
во-первых, какой элемент массива, будет доступен при текущем счетчике цикла ($fh[$q] и $fh2[$q2])?
во-вторых, чему будет равен лимит цикла ($vfh и $vfh2)?

и зачем в конце rewind($fh2);?

и последнее.

А накуя собственно пытаться удалить
unset($line[$q]);
unset($line2[$q2]);
если и $line и $line2 являются числами?
 

nvrskozzy

Новичок
эт я тупанул.. понапутал всё.. в общем код должен выглядеть вот так..

$fh = file("ID2.txt");
$fh2 = file("ID.txt");
$vfh=count($fh);
$vfh2=count($fh2);

for ($q=0;$q>$vfh;$q++) // пока не закончится 1 файл
{
$line = $fh[$q]; // строка с 1 файла

for ($q2=0;$q2>$vfh2;$q2++) // пока не закончится 2 файл
{
$line2 = $fh2[$q2]; // строка 2 файла

settype($line, "integer");
settype($line2, "integer");

if ($line==$line2) // если строки равны
{
unset($fh[$q]);
unset($fh2[$q2]);
echo "АРА";
}
}
rewind($fh2);
}


удаляться ячейки а не переменные должны.. по идее номрально всё с счётчиком должно быть, удалилась чейка и счётчик накрутил +1, уже следущую ячейку проверяет.. лимит цикла останется таким же, он же уже проверил одинаковый элемент, счётчик прошёл его, теперь можно и удалить, ничё с ним не станет =\
но одинаковых чисел снова не видит зараза, не пойму почему..

rewind($fh2); нужен потому что каждый номер в 1 файле сравнивается со всеми номерами во 2 файле..
 

Nicholas

Новичок
nvrskozzy

попробуй на бумажке записать последовательно, каждое действие, которое ты хочешь совершить.

ты собственно задачу практически решил, только у тебя сумбур какой-то получился.
 

nvrskozzy

Новичок
Блин в упор не вижу ошибки, вроде переменные все точно поставил, всё что напутал уже исправил, но числа одинаковые он не находит :((

-~{}~ 25.11.08 06:48:

люди подскажите, я в тупике :(
 
Сверху