Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Обработка строки с жанрами

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
bazarov
Отправлено: 16 Июня, 2011 - 22:37:06
Post Id


Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Авг. 2010  


Помог: 0 раз(а)




Всем привет.

допустим есть у меня описание фильма
PHP:
скопировать код в буфер обмена
  1. $text = 'Страна: США, Канада
  2. Жанр: фэнтези, боевик, триллер
  3. Год выпуска: 2011
  4. Режиссер: Зак Снайдер / Zack Snyder
  5. В ролях: Эмили Браунинг, Эбби Корниш, Джена Мэлоун
  6.  
  7. Описание: Действие развернется в 1950 году. Молодую девушку по настоянию ее злодейского отчима определяют в больницу для душевнобольных, где спустя пять дней главную героиню лоботомируют. Чтобы оградиться от боли, она выдумывает сказочный мир, где и начинает планировать свой побег — для этого ей нужно раздобыть пять предметов.
  8.  
  9. Качество видео: TeleSynch
  10. Формат видео: AVI
  11. Видео: 720x320 (2.25:1), 25 fps
  12. Аудио: 48 kHz, MPEG';


И надо найти строку

Жанр: фэнтези, боевик, триллер

и обработать её с автозаменой на линк

Жанр: <a href="">фэнтези</a>, <a href="">боевик</a>, <a href="">триллер</a>

Жанры могут быть разные

Нашёл такое, но код не подходит
PHP:
скопировать код в буфер обмена
  1. $assoc = array("triler"=>"триллер", "drama"=>"драма", "criminal"=>"криминал");
  2. $stroka = "Жанр: триллер, драма, криминал";
  3.  
  4. list($genrehead, $genrelist) = explode(":", $stroka);
  5. $genres_array = explode(", ", $genrelist);
  6.  
  7. $genres_formatted = "";
  8.  
  9. foreach($genres_array AS $genre)
  10. {
  11. $genre_assoc = array_search($genre, $assoc);
  12.  
  13. if($genre_assoc)
  14. {
  15.   $genres_formatted .= '<a href="/cat/' . $genre_assoc . '">' . $genre . '</a>';
  16.   if($genre != end($genres_array)) $genres_formatted .= ", ";
  17. }
  18. else {print("No key for " . $genre);}
  19. }
  20.  
  21. print(($genrehead . ": " . $genres_formatted);
 
 Top
altermann
Отправлено: 16 Июня, 2011 - 23:24:27
Post Id



Частый гость


Покинул форум
Сообщений всего: 196
Дата рег-ции: Март 2010  
Откуда: Днепропетровск


Помог: 6 раз(а)




PHP:
скопировать код в буфер обмена
  1. $text = 'Страна: США, Канада
  2. Жанр: фэнтези, боевик, триллер
  3. Год выпуска: 2011
  4. Режиссер: Зак Снайдер / Zack Snyder';
  5.  
  6. // Список жанров
  7. $aGenresList = array(
  8.     'триллер' => 'triler',
  9.     'драма' => 'drama',
  10.     'криминал' => 'criminal',
  11.     'action' => 'боевик'
  12. );
  13.  
  14. preg_match('/^Жанр: (.*?)$/im', $text, $match);
  15. $aGenres = explode(',', $match[1]);
  16. $sPrint = 'Жанр: ';
  17. foreach ($aGenres as $sGenre) {
  18.     $sGenre = strtolower(trim($sGenre));
  19.     if (array_key_exists($sGenre, $aGenresList)) {  // проверка на наличие в массиве жанров
  20.         $aPrint[] = '<a href="/cat/' . $aGenresList[$sGenre] . '">' . $sGenre . '</a>';
  21.     } else {
  22.         $aPrint[] = $sGenre;
  23.     }
  24. }
  25. echo $sPrint . implode(', ', $aPrint);


-----
Я прирожденный кузнец, я не могу не куя!
 
 Top
bazarov
Отправлено: 17 Июня, 2011 - 07:07:36
Post Id


Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Авг. 2010  


Помог: 0 раз(а)




Что то не работает.. просто выводит слово Жанр
 
 Top
altermann
Отправлено: 17 Июня, 2011 - 08:02:09
Post Id



Частый гость


Покинул форум
Сообщений всего: 196
Дата рег-ции: Март 2010  
Откуда: Днепропетровск


Помог: 6 раз(а)




Какие у вас кодировки скрипта и входящего текста?


-----
Я прирожденный кузнец, я не могу не куя!
 
 Top
bazarov
Отправлено: 17 Июня, 2011 - 08:03:48
Post Id


Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Авг. 2010  


Помог: 0 раз(а)




altermann пишет:
Какие у вас кодировки скрипта и входящего текста?


cp1251
 
 Top
White
Отправлено: 17 Июня, 2011 - 08:05:01
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 830
Дата рег-ции: Июнь 2011  
Откуда: Днепропетровск


Помог: 28 раз(а)




PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $text = 'Страна: США, Канада
  4. Жанр: фэнтези, боевик, триллер
  5. Год выпуска: 2011
  6. Режиссер: Зак Снайдер / Zack Snyder
  7. В ролях: Эмили Браунинг, Эбби Корниш, Джена Мэлоун
  8.  
  9. Описание: Действие развернется в 1950 году. Молодую девушку по настоянию ее злодейского отчима определяют в больницу для душевнобольных, где спустя пять дней главную героиню лоботомируют. Чтобы оградиться от боли, она выдумывает сказочный мир, где и начинает планировать свой побег — для этого ей нужно раздобыть пять предметов.
  10.  
  11. Качество видео: TeleSynch
  12. Формат видео: AVI
  13. Видео: 720x320 (2.25:1), 25 fps
  14. Аудио: 48 kHz, MPEG';
  15. $genres = array('triller'=>"триллер", 'fentezy'=>"фэнтези", 'boevik'=>"боевик");
  16. function makeGenreLinks(&$text, &$genres) {
  17.         foreach($genres as $key=>$value) {
  18.                 $text = str_replace($value, '<a href="?genre='.$key.'">'.$value.'</a>', $text);
  19.         }
  20. }
  21. makeGenreLinks($text, $genres);
  22. echo $text;
  23. ?>
  24.  


функция чувствительна к регистру


-----
if(time()>1356048000) die();
 
 Top
altermann
Отправлено: 17 Июня, 2011 - 08:34:02
Post Id



Частый гость


Покинул форум
Сообщений всего: 196
Дата рег-ции: Март 2010  
Откуда: Днепропетровск


Помог: 6 раз(а)




попробуйте добавить в начало скрипта:


Или если вы парсите страницу и оно у вас в другой кодировке используйте iconv для перекодировки

(Отредактировано автором: 17 Июня, 2011 - 08:39:04)



-----
Я прирожденный кузнец, я не могу не куя!
 
 Top
White
Отправлено: 17 Июня, 2011 - 08:58:45
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 830
Дата рег-ции: Июнь 2011  
Откуда: Днепропетровск


Помог: 28 раз(а)




strtolower() для ASCII,
для других кодировок есть mb_strtolower()


-----
if(time()>1356048000) die();
 
 Top
bazarov
Отправлено: 17 Июня, 2011 - 09:07:02
Post Id


Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Авг. 2010  


Помог: 0 раз(а)




White пишет:
White


Взял ваш код.. немного переписал и работает на ура вот только если в описании встречается ещё раз слово "боевик" он его парсит два раза.

спасибо за помощь всем кто откликнулся.
С ув. Иван Улыбка

(Отредактировано автором: 17 Июня, 2011 - 09:07:28)

 
 Top
White
Отправлено: 17 Июня, 2011 - 09:10:47
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 830
Дата рег-ции: Июнь 2011  
Откуда: Днепропетровск


Помог: 28 раз(а)




Цитата:
вот только если в описании встречается ещё раз слово "боевик" он его парсит два раза


в качестве $text передавайте функции только нужную строку


-----
if(time()>1356048000) die();
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Напишите за меня, пожалуйста »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB