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)

 PHP.SU

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


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

> Описание: Помогите пожалуйста решить задачку
wertuoz
Отправлено: 04 Ноября, 2013 - 15:20:37
Post Id


Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Нояб. 2013  


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




Есть строка $text в кодировке UTF-8 и слова (массив) $array_of_words (в той же
кодировке). Необходимо с помощью квадратных скобок выделить первые вхождения каждого слова (то есть Мама заменить на [Мама]), при этом не учитывать регистр (выделять как вася так и ваСя).

Заменять нужно только целые слова а не подслова
Пример
$text = "Мама мыла раму утром, так как рама была грязная. Теперь
раму не узнать. Мама довольна.";

$array_of_words = array ("мама","раму","утро");

Ожидаемый результат
"[Мама] мыла [раму] утром, так как рама была грязная. Теперь
раму не узнать. Мама довольна."

Решением должна быть реализация функции, которая возвращает обработанную строку
function replaceWords($text, $array_of_words);

Дополнительные требования:
1) Хорошая читаемость кода
2) Оптимизация по быстродействию
3) Функция должна работать на любой конфигурации PHP и с любым текстом в UTF-8
В качестве упрощения можно предположить, что словом является любая последовательность символов, которая не содержит следующие символы:
пробел, табуляция, перевод строки, знаки препинания (.,!?-:;) и скобки (квадратные, круглые, фигурные).
 
 Top
esterio
Отправлено: 04 Ноября, 2013 - 15:45:36
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


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




Вам в раздел напишите за меня пожалуйста.

П.С. вопрос - это тестовое задание на работу
 
 Top
imya
Отправлено: 04 Ноября, 2013 - 15:45:56
Post Id



Участник


Покинул форум
Сообщений всего: 1472
Дата рег-ции: Сент. 2012  
Откуда: Запорожье, Украина


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




esterio пишет:


П.С. вопрос - это тестовое задание на работу


Либо на работу, либо в универ.


-----
PHP:
скопировать код в буфер обмена
  1. do {box != cat;} while (cat != box);


Когда нормальный человек, уезжая из дома одевает на жену пояс верности, веб-дизайнер ставит на нее счетчик...
 
My status
 Top
IllusionMH
Отправлено: 04 Ноября, 2013 - 15:58:12
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


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




wertuoz, выкладывайте ваши адекватные, но не совсем работающие решения, а тут уже подскажут как поправить.
С нуля писать за вас задание на работу/в универ/ в школу никто не будет.
 
 Top
esterio
Отправлено: 04 Ноября, 2013 - 16:05:26
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


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




в универе не смотрять на читаемость кода
вот ловите. должно быть что-то наподобии
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. header('Content-type: text/html; charset=utf-8');
  3. function replaceWords($text, array $array_of_words)
  4. {
  5.         return preg_replace(array_map('sprintf', array_fill(0, count($array_of_words), '/\\s(%s)\\s/isu'), array_map('preg_quote', $array_of_words)), array_fill(0, count($array_of_words), ' [$1] '), $text);
  6. }
  7.  
  8. $text = "Мама мыла раму утром, так как рама была грязная. Теперь раму не узнать. Мама довольна.";
  9. $array_of_words = array ("мама","раму","утро");
  10.  
  11. echo replaceWords($text, $array_of_words);


П.С. Код не полностю рабочый.
 
 Top
imya
Отправлено: 04 Ноября, 2013 - 16:07:02
Post Id



Участник


Покинул форум
Сообщений всего: 1472
Дата рег-ции: Сент. 2012  
Откуда: Запорожье, Украина


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




IllusionMH пишет:
С нуля писать за вас задание на работу/в универ/ в школу никто не будет.

Разве что за копеечку Улыбка


-----
PHP:
скопировать код в буфер обмена
  1. do {box != cat;} while (cat != box);


Когда нормальный человек, уезжая из дома одевает на жену пояс верности, веб-дизайнер ставит на нее счетчик...
 
My status
 Top
deblogger
Отправлено: 04 Ноября, 2013 - 18:49:22
Post Id


Новичок


Покинул форум
Сообщений всего: 59
Дата рег-ции: Нояб. 2013  


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

[+]


Цитата:
$text = "Мама мыла раму утром, так как рама была грязная. Теперь
раму не узнать. Мама довольна.";


Составитель заданий явно не упарился оптимизацией кода, читаемостью и прочими выдвинутыми критериями но на русском языке. [cut]


Отредактировано администратором: EuGen, 04 Ноября, 2013 - 18:56:00
Неоднократные неуважительные выпады и комментарии. Строгое предупреждение
 
 Top
wertuoz
Отправлено: 04 Ноября, 2013 - 20:34:15
Post Id


Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Нояб. 2013  


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




esterio пишет:
в универе не смотрять на читаемость кода
вот ловите. должно быть что-то наподобии
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. header('Content-type: text/html; charset=utf-8');
  3. function replaceWords($text, array $array_of_words)
  4. {
  5.         return preg_replace(array_map('sprintf', array_fill(0, count($array_of_words), '/\\s(%s)\\s/isu'), array_map('preg_quote', $array_of_words)), array_fill(0, count($array_of_words), ' [$1] '), $text);
  6. }
  7.  
  8. $text = "Мама мыла раму утром, так как рама была грязная. Теперь раму не узнать. Мама довольна.";
  9. $array_of_words = array ("мама","раму","утро");
  10.  
  11. echo replaceWords($text, $array_of_words);


П.С. Код не полностю рабочый.


Спасибо вам огромное!
все работает только возвращает
Мама мыла [раму] утром, так как рама была грязная. Теперь [раму] не узнать. [Мама] довольна.
почему то не меняет первое слово и выделяет все остальные (
(Добавление)
прогресс дошел до того что как и нужно заменяет только первое найденное слово из маски но почему то все ровно не хочет заменять первое слово Мама
то есть выводит: Мама мыла [раму] утром, так как рама была грязная. Теперь раму не узнать. [Мама] довольна.

П.С. если поставить в значении переменной $text перед Мама пробел то все работает может можно как то сделать по другому ??
 
 Top
esterio
Отправлено: 05 Ноября, 2013 - 09:59:08
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


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




PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. header('Content-type: text/html; charset=utf-8');
  3. function replaceWords($text, array $array_of_words)
  4. {
  5.         return preg_replace(array_map('sprintf', array_fill(0, count($array_of_words), '/(^|\\s)(%s)($|\\s)/isu'), array_map('preg_quote', $array_of_words)), array_fill(0, count($array_of_words), '$1[$2]$3'), $text);
  6. }
  7.  
  8. $text = "Мама мыла раму утром, так как рама была грязная. Теперь раму не узнать. Мама довольна.";
  9. $array_of_words = array ("мама","раму","утро");
  10.  
  11. echo replaceWords($text, $array_of_words);

Цитата:
[Мама] мыла [раму] утром, так как рама была грязная. Теперь [раму] не узнать. [Мама] довольна.
 
 Top
wertuoz
Отправлено: 05 Ноября, 2013 - 14:50:10
Post Id


Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Нояб. 2013  


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




esterio пишет:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. header('Content-type: text/html; charset=utf-8');
  3. function replaceWords($text, array $array_of_words)
  4. {
  5.         return preg_replace(array_map('sprintf', array_fill(0, count($array_of_words), '/(^|\\s)(%s)($|\\s)/isu'), array_map('preg_quote', $array_of_words)), array_fill(0, count($array_of_words), '$1[$2]$3'), $text);
  6. }
  7.  
  8. $text = "Мама мыла раму утром, так как рама была грязная. Теперь раму не узнать. Мама довольна.";
  9. $array_of_words = array ("мама","раму","утро");
  10.  
  11. echo replaceWords($text, $array_of_words);

Цитата:
[Мама] мыла [раму] утром, так как рама была грязная. Теперь [раму] не узнать. [Мама] довольна.



Огромное вам спасибо !
 
 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