Advertisement
Ra1ski

Untitled

Oct 11th, 2014
509
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 2.08 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')->getStopWords();
  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