За последние 24 часа нас посетили 16875 программистов и 1702 робота. Сейчас ищут 945 программистов ...

Сравнить две строки

Тема в разделе "PHP для новичков", создана пользователем inline, 24 фев 2012.

  1. inline

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

    С нами с:
    21 май 2010
    Сообщения:
    466
    Симпатии:
    0
    Как сравнить две строки на количество одних и тег же слов?
     
  2. denkog

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

    С нами с:
    24 фев 2012
    Сообщения:
    7
    Симпатии:
    0
    Вот тебе я накидал готовый класс, дальше его настраивай и работай с ним сам.

    Код (Text):
    1. <?php
    2.  
    3.  
    4. class CompareString {
    5.  
    6.     public $findArray = array();
    7.     private $inRow1,$inRow2,$tmp1,$tmp2;
    8.  
    9.     public function __construct($str, $toStr) {
    10.      
    11.      $this->inRow1 = $str;
    12.      $this->inRow2 = $toStr;
    13.      
    14.      $this->tmp1 = array_unique(explode(' ', $str));
    15.      sort($this->tmp1);
    16.      $this->tmp2 = explode(' ', $toStr);
    17.      $this->goCompare();
    18.      return $this;
    19.     }
    20.  
    21.     private function goCompare() {
    22.      foreach ($this->tmp1 as $val1) {
    23.          foreach ($this->tmp2 as $val2) {
    24.           if ($val1 == $val2) {
    25.               if ($this->findArray[$val1] == null)
    26.                $this->findArray[$val1] = 0;
    27.               ++$this->findArray[$val1];
    28.           }
    29.          }
    30.      }
    31.     }
    32.  
    33.     public function renderResult() {
    34.      echo "<p>$this->inRow1</p>";
    35.      echo "<p>$this->inRow2</p>";
    36.      echo "<table>";
    37.      foreach ($this->findArray as $key => $value) {
    38.          printf('<tr><td>Слово:</td><td><font color="red" >%s</font></td><td>повторяеться:</td><td><font color="red" >%s</font></td><td>раз.</td></tr>', $key, $value);
    39.      }
    40.      echo "</table>";
    41.     }
    42.  
    43. }
    44.  
    45. $str1 = 'Берешь его одно слово из первого массива и проверяешь его';
    46. $str2 = 'Берешь его одно слово из первого массива и его проверяешь его и наличие другом, затем 2-рое и так далее';
    47.  
    48. $result = new CompareString($str1, $str2);
    49. $result->renderResult();
    50. ?>

    Результат:

    Что сравниваем
    Берешь его одно слово из первого массива и проверяешь его

    С чем сравниваем
    Берешь его одно слово из первого массива и его проверяешь его и наличие другом, затем 2-рое и так далее

    Слово: Берешь повторяеться: 1 раз.
    Слово: его повторяеться: 3 раз.
    Слово: и повторяеться: 3 раз.
    Слово: из повторяеться: 1 раз.
    Слово: массива повторяеться: 1 раз.
    Слово: одно повторяеться: 1 раз.
    Слово: первого повторяеться: 1 раз.
    Слово: проверяешь повторяеться: 1 раз.
    Слово: слово повторяеться: 1 раз.
     
  3. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Код (PHP):
    1. private $inRow1,$inRow2,$tmp1,$tmp2; 
    и
    Код (PHP):
    1. echo "<p>".$this->inRow1."</p><p>".$this->inRow2."</p><table>"; 
    и в целом поменьше коду пишите, проще будет)
     
  4. inline

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

    С нами с:
    21 май 2010
    Сообщения:
    466
    Симпатии:
    0
    горой кода реализовать это я могу
    проще никак?
     
  5. denkog

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

    С нами с:
    24 фев 2012
    Сообщения:
    7
    Симпатии:
    0
    Код (Text):
    1. class CompareString {
    2.     static public function Compare($str, $toStr) {
    3.      $findArray = array();
    4.      $tmp1 = array_unique(explode(' ', $str));
    5.      $tmp2 = explode(' ', $toStr);
    6.      foreach ($tmp1 as $val1) {
    7.          foreach ($tmp2 as $val2) {
    8.           if ($val1 == $val2) {
    9.               if ($findArray[$val1] == null)
    10.                $findArray[$val1] = 0;
    11.               ++$findArray[$val1];
    12.           }
    13.          }
    14.      }
    15.      return $findArray;
    16.     }
    17. }
    Код (Text):
    1.  
    2. $str1 = 'Берешь его одно слово из первого массива и проверяешь его';
    3. $str2 = 'Берешь его одно слово из первого массива и его проверяешь его и наличие другом, затем 2-рое и так далее';
    4. var_dump(CompareString::Compare($str1, $str2));
    Меньше некуда!!!
     
  6. inline

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

    С нами с:
    21 май 2010
    Сообщения:
    466
    Симпатии:
    0
    а если
    $ar_str1=implode(":",$str1);
    $ar_str2=implode(":",$str2);

    и потом array_diff или array_intersect