За последние 24 часа нас посетили 93567 программистов и 5826 роботов. Сейчас ищут 2612 программистов ...

Цикл расчета совпадений

Тема в разделе "PHP для новичков", создана пользователем nameless21, 9 мар 2016.

  1. nameless21

    nameless21 Новичок

    С нами с:
    9 мар 2016
    Сообщения:
    1
    Симпатии:
    0
    дравствуйте! Помогите с написанием цикла для выполнения такой задачи: на вход поступает несколько файлов (минимум 2), затем каждый из них заносится в массив, потом ищутся различия в массивах (идет сравнение каждого с каждым), потом рассчитывается процент совпадений.
    То, что есть сейчас, позволяет находить процент при условии, что все уже задано в программе отдельно по каждой операции. нужно, чтобы все эти переборки и расчеты выполнялось автоматически с помощью цикла. И с его написанием возникают проблемы.
    Помогите, пожалуйста, пригодится любой совет и любое замечание.
    Код (PHP):
    1. <?php
    2. // Сюда впишите названия файлов (начало)
    3. $one_file_name = "one.txt"; // Название первого файла
    4. $two_file_name = "two.txt"; // Название второго файла
    5. // Сюда впишите названия файлов (конец)
    6.  
    7. $one = file($one_file_name); // Открываем первый файл и заносим из него все строки в массив
    8. $two = file($two_file_name); // Открываем второй файл и заносим из него все строки в массив
    9.  
    10. $result = array_intersect($one, $two); // поиск различий
    11. $result1 = array_intersect($two, $one );
    12.  
    13. print_r($result);
    14. print_r($result1);
    15.  
    16. $q = count($one); //количество элементов 1-го массива
    17. $e = count($two);
    18. $w = count($result); //ко-во элементов массива с различиями
    19. $w1 = count($result1);
    20. $r = ($w/$q)*100; // расчет процента совпадений
    21. $r1 = ($w1/$e)*100;
    22. print_r($r."\n");
    23. print_r($r1);
    24. ?>
    Подсказка от модератора:
    Любой код или текст конфигурации пишите между тегом [code=php] и [/code].
    Используйте отступы в коде для форматирования текста.
    Это помогает быстрее понять вас, увеличивает шанс на получение ответа.
    Что выделять? Например: PHP, HTML, CSS, JavaScript, SQL, XML, .htaccess, ini, регулярные выражения, код шаблонизаторов, любая другая разметка, результаты array/object dump и т. д.
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.333
    Симпатии:
    1.753
    а учиться за тебя пушкин будет?
     
  3. freelsd

    freelsd Активный пользователь

    С нами с:
    12 апр 2015
    Сообщения:
    63
    Симпатии:
    0
    Можно сравнение двух файлов оформить в функцию. И входящие файлы задавать массивом. Потом проходится по массиву и сравнивать все файлы. Конечно тут нужно учесть что некоторые файлы буду сравниваться по нескольку раз, чтобы этого избежать нужно продумать алгоритм. Вот псевдокод накидал:

    Код (PHP):
    1. <?php
    2.  
    3. $in_files = ( 'one.txt', 'two.txt', 'three.txt');
    4.  
    5. if (count($in_files) < 2)
    6.     exit("Укажите минимум 2 файла для сравнения!\n");
    7.  
    8. foreach($in_files as $filen1){
    9.     
    10.     foreach($in_files as $filen2){
    11.         compare($filen1, $filen2);
    12.     }
    13.     
    14. }
    15.  
    16.  
    17. function compare( $file_n1, $file_n2 ){
    18.     // Сюда впишите названия файлов (начало)
    19.     $one_file_name = $file_n1; // Название первого файла
    20.     $two_file_name = $file_n2; // Название второго файла
    21.     // Сюда впишите названия файлов (конец)
    22.  
    23.     $one = file($one_file_name); // Открываем первый файл и заносим из него все строки в массив
    24.     $two = file($two_file_name); // Открываем второй файл и заносим из него все строки в массив
    25.  
    26.     $result = array_intersect($one, $two); // поиск различий
    27.     $result1 = array_intersect($two, $one );
    28.  
    29.     print_r($result);
    30.     print_r($result1);
    31.  
    32.     $q = count($one); //количество элементов 1-го массива
    33.     $e = count($two);
    34.     $w = count($result); //ко-во элементов массива с различиями
    35.     $w1 = count($result1);
    36.     $r = ($w/$q)*100; // расчет процента совпадений
    37.     $r1 = ($w1/$e)*100;
    38.     print_r($r."\n");
    39.     print_r($r1);
    40.     
    41. }