За последние 24 часа нас посетили 215834 программиста и 2228 роботов. Сейчас ищут 1493 программиста ...

сравнение

Тема в разделе "PHP для новичков", создана пользователем alexeurodnepr, 21 июл 2009.

  1. alexeurodnepr

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

    С нами с:
    18 июл 2008
    Сообщения:
    244
    Симпатии:
    0
    предположим есть массив с строкой - Программирование на PHP для новичков
    есть такой же массив с аналогичной строкой - Программирование на PHP для новичков

    в массиве может быть много строк как в одном так и в другом и нужно их всех сравнить

    Пример: берем первую строку с массива и пробегаем по другому массив, если равны - то тру или фолс, вообщем смысл такой.

    Вопрос: как их сравнить, на 100% совпадание?

    пробовал различные функции на сравнение, но допустим таких строк в массиве будем много и они ВСЕ одинаковые, то из 100% строк оно скажет 60% строк совпадают а 40% - нет, хотя они все равны...

    потом думал, если разбить одну и другую строку на символы и сравнить их по символьно....
    когда строк мало - работает норм, совпадение 100%, но если таких строк будет много... то сервак падает)))

    может есть у кого-то мысли по поводу, спасибо?
     
  2. Vegas

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

    С нами с:
    21 июл 2009
    Сообщения:
    4
    Симпатии:
    0
    если массивы примерно одинаково наполнены, то можно сделать цикл в котором сделать условие, что каждая строка одного массива будет сравниваться с каждой строкой другого и поставить счётчик...
    если значение счётчика будет под конец совпадать с велечиной массива, то совпадение 100%
    Код (Text):
    1.  
    2. //первый массив
    3. $arr[0]="aaa";
    4. $arr[1]="bbb";
    5. $arr[2]="ccc";
    6. //второй массив
    7. $arr2[0]="aaa";
    8. $arr2[1]="bbb";
    9. $arr2[2]="ccc";
    10.  
    11. $counter=0;
    12.  
    13. for($i=0;$i<count($arr);$i++){
    14. if($arr[$i]==$arr2[$i]){
    15. $counter++;
    16. }
    17.  
    18. }
    19. if($counter==count($arr)){echo "100%";} {echo "<strike>100%</strike>";}
    а если нужно сколько конкретно процентов совпало ...можно поделить счетчик на сумму элементов в массиве и умножить на 100
     
  3. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
  4. alexeurodnepr

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

    С нами с:
    18 июл 2008
    Сообщения:
    244
    Симпатии:
    0
    Vegas

    не, в по количеству символов я сравниваю в самом начале если не равны то фолс. если равны то нужно проверить более детально :)

    Sergey89
    не не, вы наверно не правильно поняли я с своими массивами вас не в ту сторону направил - я имею ввиду, что-нибудь типа - strcmp, similar_text, levenshtein и прочих функций

    когда мы имеем полностью идентичные два массива с значениями
    foreach (1 массив)
    то берем 1. элемент с первого и массива
    foreach (2 массив)
    проходим по второму массиву и каждый элемент второго массива сравниваем с первым таким способом к примеру
    strcmp ($arr_with_string1, $arr_with_string2)
    вообщем оно норм, но не совсем т.к. массивы все идентичны но процент совпадения оно дает где-то 80% ... хотя все идентично....
     
  5. alexeurodnepr

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

    С нами с:
    18 июл 2008
    Сообщения:
    244
    Симпатии:
    0
    мда... ну я и прогнал... удалите пожалуйста тему буду очень признателен!
     
  6. TheShock

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

    С нами с:
    30 май 2009
    Сообщения:
    1.255
    Симпатии:
    0
    Адрес:
    Київ
    может, что-то типа такого?
    PHP:
    1. <?php
    2. function arrayCompare($arr1, $arr2) {
    3.     if(count($arr1)<count($str2)) {
    4.         $tmp = $arr1;
    5.         $arr1 = $arr2;
    6.         $arr2 = $tmp;
    7.         unset($tmp);
    8.     }
    9.    
    10.     $count = 0;
    11.     for($i=0, $c=count($arr1); $i<$c; $i++) {
    12.         if(in_array($arr1[$i], $arr2)) {
    13.             $count++;
    14.         }
    15.     }
    16.    
    17.     return $count/count($arr2)*100;
    18. }
    19. ?>
     
  7. alexeurodnepr

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

    С нами с:
    18 июл 2008
    Сообщения:
    244
    Симпатии:
    0
    TheShock

    не, но, что-то подобное :) решение на столько было простым, что я честно говоря даже стыжусь его показать :) это равносильно если б я ответил 2+2=5...
     
  8. TheShock

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

    С нами с:
    30 май 2009
    Сообщения:
    1.255
    Симпатии:
    0
    Адрес:
    Київ
    alexeurodnepr, показывай. :)