Advertisement
Ra1ski

Untitled

Oct 10th, 2014
481
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 2.21 KB | None | 0 0
  1.     /**
  2.      * Возвращает отформатированую строку ключевых слов разделенных запятыми
  3.      *
  4.      * @param  string  $string    - Входная строка для форматирования
  5.      * @param  string  $prefix    - Если нужно, то можно задавать значение первому слову в keywords
  6.      * @param  integer $limit     - Лимит количества слов
  7.      * @param  string  $separator - Разделитель слов
  8.      * @return string  - Отформатированная строка разделенная $separator-ом
  9.      */
  10.     public function seoGenerateKeywordsFromString($string, $prefix = '', $limit = 10, $separator = ', ')
  11.     {
  12.         // Переводим все в нижний регистр
  13.         $string = mb_convert_case($string, MB_CASE_LOWER, 'UTF-8');
  14.  
  15.         $stringsArray   = explode(' ', $string);
  16.         $stopWordsArray = $this->getModelsLoader()->load('SeoCommon')->seoGetStopWordsArray();
  17.  
  18.         // Отформатированный массив, который исключает стоп-слова и повторения
  19.         $stringsArray = array_unique(array_diff($stringsArray, $stopWordsArray));
  20.  
  21.         // Шаблоны
  22.         $replacementPatterns = [
  23.             '/[^а-я a-z 0-9]/u', // удаляет все знаки, кроме букв и чисел
  24.             '/\b\w{1,3}\b/u',    // удаляет все слова, которые <= 3-х знаков
  25.         ];
  26.  
  27.         // Очищает уже обработанный массив применяя шаблоны регулярных выражений. см. выше
  28.         $stringsArray = preg_replace($replacementPatterns, '', $stringsArray);
  29.  
  30.         // Создаем строку ключевых слов разделенных $separator-ом с ограничением в $limit слов
  31.         $keywords = implode($separator, array_slice(array_filter($stringsArray), 0, $limit));
  32.  
  33.         // Добавляем префикс
  34.         if (!empty($prefix)) {
  35.             $keywords = $prefix . $separator . $keywords;
  36.         }
  37.  
  38.         return $keywords;
  39.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement