Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Проверка базы на наличие
Форумы портала PHP.SU » PHP » Напишите за меня, пожалуйста » Проверка базы на наличие

Страниц (1): [1]
 

1. pgont - 14 Апреля, 2008 - 11:17:20 - перейти к сообщению
Всем привет, подскажите пожалуйста такой скрипт:
Есть два текстовых файла. В одном список слов или цифр (немного, штук 150, в каждой строке одно слово или цифра), в другом текстовом файле тоже список слов или цифр, так же по одному слову или цифре в каждой строке, но этот список гораздо больше (несколько тысяч или дестятков тысяч). Нужно чтобы скрипт проверил есть ли слова или цифры из первого файла во втором и вывел на экран те, которые есть.
Я программирую недавно и попытался сделать это так, но не работает:

CODE (text):
скопировать код в буфер обмена
  1. <?php
  2. $file1=file("file1.txt");
  3. $file2=file_get_contents("file2.txt");
  4. $n=sizeof($file1);
  5. $i=0;
  6. while ($i<$n)
  7. {
  8. $one=$file1[$i];
  9. eregi($one, $file2, $regs);
  10. $b= sizeof($regs);
  11.   if ($b>=1)
  12.   {
  13.         $ret=$regs[0];
  14.        
  15.         echo "$ret";
  16. unset ($regs);
  17.   }
  18.   else {echo "NO WORD";}
  19. $i++;
  20. }
  21.  ?>


file1.txt - файл с базой цифр или слов, которые нужно найти в file2.txt
Буду очень благодарен всем кто поможет, зараннее огромное спасибо.
2. EuGen - 14 Апреля, 2008 - 11:30:22 - перейти к сообщению
Можно попробовать так:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $rgF1=file("file1.txt");
  4. $rgF2=file("file2.txt");
  5. $result=array_intersect($rgF2, $rgF1);
  6. //собственно, $result и должен быть Вашим массивом
  7. ?>
  8.  

Я говорю "попробовать" не потому, что это может не сработать, а потому, что сам лично никогда не использовал функцию array_intersect. Почитать можете тут:
http://php.su/functions/?array-intersect
3. pgont - 14 Апреля, 2008 - 12:19:30 - перейти к сообщению
To EuGen
Спасибо громное за ответ, но я сам виноват, забыл уточнить, что скрипт должен найти слово или цифру из пкрвого файла во втором при условии, что во втором файле к слову или цифре могут быть добавлены другие символы. Например:
в первом файле есть слово ВИЗИТК, а во втором ВИЗИТКАМ, ВИЗИТКИ, или в первом файле есть цифра 45612, а во втором 2456123. Нужно чтобы скрипт нашел хотябы одно совпадение и показал, что оно есть выводом того, что совпало.
4. EuGen - 14 Апреля, 2008 - 12:32:02 - перейти к сообщению
Тут уже, пожалуй, не обойтись стандартными функциями.
Примерно так:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. function search_array_string(&$rgData, $search)
  4. {
  5.    foreach ($rgData as $key=>$value)
  6.    {
  7.       if(strpos($value, $search)!==FALSE)
  8.          return $value;
  9.    }
  10.    return FALSE;
  11. }
  12. $rgF1=file("file1.txt");
  13. $rgF2=file("file2.txt");
  14. $rgResult=array();
  15. foreach($rgF1 as $key=>$value)
  16. {
  17.    $found=search_array_string($rgF2, $value);
  18.    if($found!==FALSE)
  19.       $rgResult[$value]=$found;
  20. }
  21. //на выходе имеем массив - $rgResult, содержащий совпадения в порядке "значение из 1-го массива"=>"найденное значение 2-го массива"
  22. ?>
  23.  
5. pgont - 14 Апреля, 2008 - 21:22:04 - перейти к сообщению
To EuGen
Спасибо огромное, все работает, это как раз то что нужно, сам не догадался до такого.
6. pgont - 22 Апреля, 2008 - 12:34:04 - перейти к сообщению
Только сейчас заметил что не точно работает, допустим если в file1.txt есть слова:
визитк
буклет
гараж

а в file2.txt слова:
визтки
визиткам
визитница
буклеты
гаражи
ручки
тетради

то в массив $rgResult будет содержать только гараж=>гаражи и все, скрипт найдет и положит в массив $rgResult всегда только последнее значение из file1.txt. У меня работает только так.
Пожалуйста подскажите что сделать чобы скрипт заработал.

 

Powered by ExBB FM 1.0 RC1