PHP:
Есть строка $text в кодировке UTF-8 и слова (массив) $array_of_words (в той же
кодировке). Необходимо с помощью квадратных скобок выделить первые вхождения каждого слова (то есть Мама заменить на [Мама]), при этом не учитывать регистр (выделять как вася так и ваСя).
Заменять нужно только целые слова а не подслова (например, в строке "Мама мыла
раму утром, так как рама была грязная." с массивом ("ама","раму","утро") выделится только первое слово "раму": "Мама мыла [раму] утром, так как рама была грязная.")
Решением должна быть реализация функции, которая возвращает обработанную строку
function replaceWords($text, $array_of_words);
А это по SQL
Есть таблица пользователей
CREATE TABLE `users` (
`user_id` int(11) NOT NULL default '0',
`birthday` date NOT NULL default '0000-00-00',
`nickname` char(32) NOT NULL default '',
`password` char(32) NOT NULL default '',
PRIMARY KEY (`user_id`)
)
Необходимо написать SQL запрос для получения информации о 5-ти ближайших днях рождения пользователей. Результат запроса должен содержать поля nickname, день и месяц рождения, достигаемый возраст. Ближайший день рождения должен следовать первым в результирующем наборе данных. SQL запрос должен корректно выполняться в MySQL 4.0
Спустя 10 минут, 32 секунды (17.04.2009 - 12:50) sergeiss написал(а):
Встречный вопрос: свои мысли какие? Ты ужО выскажи, не стесняйся
И тогда можно будет и помочь. Пока нету, чему помогать.

Спустя 5 минут, 43 секунды (17.04.2009 - 12:56) uglik написал(а):
Я просто не могу понять что от мнея требуется....
Спустя 1 минута, 58 секунд (17.04.2009 - 12:58) waldicom написал(а):
Цитата (uglik @ 17.04.2009 - 10:56) |
Я просто не могу понять что от мнея требуется.... |
Хм... Нормально...
Я думаю от тебя требуется написать задание, которое тебе дали в школе/колледже/институте/университете
Спустя 1 минута, 27 секунд (17.04.2009 - 12:59) sergeiss написал(а):
Цитата (uglik @ 17.04.2009 - 12:56) |
Я просто не могу понять что от мнея требуется.... |
А можно тогда еще один вопрос: если ты даже не можешь понять, что надо - то оно тебе надо, эти задачки решать? Это вполне серьезный вопрос. Подумай над ним. Может быть, лучше чем-то другим заняться, а не программированием?
Спустя 4 минуты, 4 секунды (17.04.2009 - 13:03) twin написал(а):
Их бедных гоняют почем зря по этому php, надо оно кому или нет... Нас в своё время по научному коммунизму гоняли.

Спустя 1 минута, 1 секунда (17.04.2009 - 13:04) uglik написал(а):
Мне нравится програмирование....а увлекаюсь этим 2 года.... просто может вы мне обесните немного по другому, что от меня требуется здеать...а я вам попробую сделать и вы меня проверите...
Спустя 6 минут, 1 секунда (17.04.2009 - 13:10) sergeiss написал(а):
Цитата (uglik @ 17.04.2009 - 13:04) |
Мне нравится програмирование....а увлекаюсь этим 2 года.... просто может вы мне обесните немного по другому, что от меня требуется здеать...а я вам попробую сделать и вы меня проверите... |
Господа... У нас тут есть смайлик "Я в шоке"??? Если нету, то надо вводить срочно

Значит, объясняю. В задаче 1 надо
Цитата |
с помощью квадратных скобок выделить первые вхождения каждого слова (то есть Мама заменить на [Мама]), при этом не учитывать регистр (выделять как вася так и ваСя). Заменять нужно только целые слова а не подслова..... Решением должна быть реализация функции, которая возвращает обработанную строку function replaceWords($text, $array_of_words); |
А в задаче 2
Цитата |
Необходимо написать SQL запрос для получения информации о 5-ти ближайших днях рождения пользователей. Результат запроса должен содержать поля nickname, день и месяц рождения, достигаемый возраст. Ближайший день рождения должен следовать первым в результирующем наборе данных. SQL запрос должен корректно выполняться в MySQL 4.0 |
Я ответил на вопрос?
Спустя 46 секунд (17.04.2009 - 13:11) waldicom написал(а):
2 задания.
1. Есть входная строка (A). И есть проверяемые слова (B, C, D). Если во входной строке А есть слово B или C или D, то добавить к этому слову скобки в начале и в конце
2. Выбрать ближайшие дни рождения.
Сегодня 17.04.2009.
В базе есть
18.04.2009.
19.04.2009.
20.04.2009.
21.04.2009.
22.04.2009.
23.04.2009.
24.04.2009.
25.04.2009.
В результате должно быть:
18.04.2009.
19.04.2009.
20.04.2009.
21.04.2009.
22.04.2009.
1. Есть входная строка (A). И есть проверяемые слова (B, C, D). Если во входной строке А есть слово B или C или D, то добавить к этому слову скобки в начале и в конце
2. Выбрать ближайшие дни рождения.
Сегодня 17.04.2009.
В базе есть
18.04.2009.
19.04.2009.
20.04.2009.
21.04.2009.
22.04.2009.
23.04.2009.
24.04.2009.
25.04.2009.
В результате должно быть:
18.04.2009.
19.04.2009.
20.04.2009.
21.04.2009.
22.04.2009.
Спустя 35 секунд (17.04.2009 - 13:11) waldicom написал(а):
Цитата |
У нас тут есть смайлик "Я в шоке"??? Если нету, то надо вводить срочно |
Однозначно

Спустя 4 минуты, 27 секунд (17.04.2009 - 13:16) RealMan написал(а):
function d123($st,$arr)
{
$a="#(^|\s|\.|,)(".implode("|",$arr).")(\s|\.|,|$)#i";
$st=preg_replace($a,"\$1[\$2]\$3",$st);
$st=preg_replace($a,"\$1[\$2]\$3",$st);
return $st;
}
{
$a="#(^|\s|\.|,)(".implode("|",$arr).")(\s|\.|,|$)#i";
$st=preg_replace($a,"\$1[\$2]\$3",$st);
$st=preg_replace($a,"\$1[\$2]\$3",$st);
return $st;
}
Спустя 1 минута, 46 секунд (17.04.2009 - 13:18) RealMan написал(а):
че вы на человека напали? ему может это нафиг не надо в жизне, он может быть художником станет.
А школа есть школа ... списал - получил оценку и хорошо.
А школа есть школа ... списал - получил оценку и хорошо.
Спустя 14 секунд (17.04.2009 - 13:18) uglik написал(а):
Ошибка
SQL-запрос :
CREATE TABLE `users` (
`user_id` int( 11 ) NOT NULL default '0',
`birthday` date NOT NULL default '0000-00-00',
`nickname` char( 32 ) NOT NULL default '',
`password` char( 32 ) NOT NULL default '',
PRIMARY KEY ( `user_id` )
)
Ответ MySQL:
#1050 - Table 'users' already exists
А что за ошибка? Только не нужно в меня кидать камнями и гнилыми помидорами....я сюда за помощью пришел и хочу в этом разобраться....просто если бы мне было на это пофигу я бы и данный топик не открывал бы....обяснить мне эту некаму....
Те кто пришел поунижать новичка..прошу воздержаться от своих коментраниев...вспомните себя в начале, когда вы начинали и как порой бывает тяжело
SQL-запрос :
CREATE TABLE `users` (
`user_id` int( 11 ) NOT NULL default '0',
`birthday` date NOT NULL default '0000-00-00',
`nickname` char( 32 ) NOT NULL default '',
`password` char( 32 ) NOT NULL default '',
PRIMARY KEY ( `user_id` )
)
Ответ MySQL:
#1050 - Table 'users' already exists
А что за ошибка? Только не нужно в меня кидать камнями и гнилыми помидорами....я сюда за помощью пришел и хочу в этом разобраться....просто если бы мне было на это пофигу я бы и данный топик не открывал бы....обяснить мне эту некаму....
Те кто пришел поунижать новичка..прошу воздержаться от своих коментраниев...вспомните себя в начале, когда вы начинали и как порой бывает тяжело
Спустя 1 минута, 10 секунд (17.04.2009 - 13:19) waldicom написал(а):
Цитата |
А что за ошибка? |
Цитата |
Ответ MySQL: #1050 - Table 'users' already exists |
Спустя 3 минуты, 58 секунд (17.04.2009 - 13:23) sergeiss написал(а):
Цитата (uglik @ 17.04.2009 - 13:18) |
Те кто пришел поунижать новичка..прошу воздержаться от своих коментраниев...вспомните себя в начале, когда вы начинали и как порой бывает тяжело |
Это не издевательство над новичком.
А одно из двух: издевательство новичка либо над собой, либо над форумчанами. Доказать? Или это и так очевидно?
Спустя 1 минута, 54 секунды (17.04.2009 - 13:25) uglik написал(а):
Всмем большое спасибо за помощь.....((( вы мне очень помогли
Спустя 3 минуты, 12 секунд (17.04.2009 - 13:28) RealMan написал(а):
первую задачу - решение я тебе написал.
по SQL переведи на русский ошибку, думаю должен сам понять в чем проблема.
по SQL переведи на русский ошибку, думаю должен сам понять в чем проблема.
Спустя 25 минут, 24 секунды (17.04.2009 - 13:54) uglik написал(а):
Составленные таблицы 'пользователи' уже существуют
Так я же создаю новую...как они могут уже существовать???
RealMan а по проще написать решение первой задачи как нить можно??
Так я же создаю новую...как они могут уже существовать???
RealMan а по проще написать решение первой задачи как нить можно??
Спустя 4 минуты, 59 секунд (17.04.2009 - 13:59) twin написал(а):
Сделай так:
Код |
DROP TABLE `users` |
и повтори свой запрос.
PS не то маненько...

Спустя 7 минут, 23 секунды (17.04.2009 - 14:06) uglik написал(а):
Все со втарым заданием я разобрался сам....
Зделал запрос к базе, отсартировал по дню рождения и написал выводить первые 5 пользователе....
Помогите с первым plz. Хотя бы напишите что мне нужно зделать для нуба последовательно, а я попробую написать код и выкину сюда для проверки
Зделал запрос к базе, отсартировал по дню рождения и написал выводить первые 5 пользователе....
Помогите с первым plz. Хотя бы напишите что мне нужно зделать для нуба последовательно, а я попробую написать код и выкину сюда для проверки
Спустя 1 час, 6 минут, 22 секунды (17.04.2009 - 15:12) RealMan написал(а):
ты имеешь ввиду более простыми функциями?
тогда такая программа растянется на пару тройку десятков строк. столько мне уже лениво писать.
тогда такая программа растянется на пару тройку десятков строк. столько мне уже лениво писать.
Спустя 1 час, 13 минут, 37 секунд (17.04.2009 - 16:26) RealMan написал(а):
блин, там оказывается только первое вхождение надо найти. тогда как я написал не катит.
Спустя 6 минут, 47 секунд (17.04.2009 - 16:33) sergeiss написал(а):
RealMan - в хэлпе сказано следующее насчет функции str_replace:
Цитата |
Если не нужны сложные правила поиска/замены, использование этой функции предпочтительнее ereg_replace() или preg_replace(). |
Или, говоря проще, не надо наворачивать (усложнять) там, где можно сделать просто.
Если автору вопроса это интересно (или неинтересно, но нужно)... Пусть подумает сам над реализацией

Спустя 1 час, 34 минуты, 4 секунды (17.04.2009 - 18:07) RealMan написал(а):
Цитата (sergeiss @ 17.04.2009 - 19:33) | ||
RealMan - в хэлпе сказано следующее насчет функции str_replace:
Или, говоря проще, не надо наворачивать (усложнять) там, где можно сделать просто. |
очень хочу увидеть пример как будет реализована функция с тем же функционалом как моя, но написаная на str_replace.
Спустя 4 часа, 12 минут, 50 секунд (17.04.2009 - 22:20) kirik написал(а):
Цитата (sergeiss @ 17.04.2009 - 08:33) |
Или, говоря проще, не надо наворачивать (усложнять) там, где можно сделать просто. |
Cудя по всему одной str_replace тут действительно не обойтись.. А городить городушки из строковых функций тоже не вариант.
Цитата (RealMan @ 17.04.2009 - 05:18) |
че вы на человека напали? ему может это нафиг не надо в жизне, он может быть художником станет. |
Цитата (uglik @ 17.04.2009 - 05:04) |
Мне нравится програмирование....а увлекаюсь этим 2 года.... |
Уже не станет

Цитата (uglik @ 17.04.2009 - 05:04) |
просто может вы мне обесните немного по другому, что от меня требуется здеать...а я вам попробую сделать и вы меня проверите... |
Первая задача - нужно пробежать по массиву слов, и с помощью регулярного выражения в заданной строке заменить каждое слово из массива (только одно, первое, судя по задаче) на это же слово в квадратных скобках. Просто доработай под себя то, что написал RealMan.
Спустя 3 часа, 7 минут, 12 секунд (18.04.2009 - 01:27) RealMan написал(а):
создай цикл который перебирает все элементы массива.
внутри цикла поставь 2 строки:
внутри цикла поставь 2 строки:
PHP |
$a="#(^|\W)(".$word.")(\W|$)#i"; |
где $st - твоя строка про маму и раму

$word - слово из массива.
ЗЫЖ можно много варинатов решений придумать на функциях обработки строк, но str_replace никак ваще не вписывается, хотя туплю может

Спустя 8 минут, 9 секунд (18.04.2009 - 01:35) kirik написал(а):
Цитата (RealMan @ 17.04.2009 - 17:27) |
но str_replace никак ваще не вписывается, хотя туплю может |
Покажешь?
$word нужно обязательно экранировать через preg_quote, иначе могут возникнуть некоторые проблемы. Плюс к этому нужно добавить модификатор u, иначе не будет работать регистронезависимость при utf8.
Спустя 9 часов, 1 минута, 7 секунд (18.04.2009 - 10:36) RealMan написал(а):
Цитата (kirik @ 18.04.2009 - 04:35) | ||
Покажешь? |
без str_replace как минимум 3 варианта решения вижу:
1. разбор строки на 3 части до слова, слово и после слова.
2. перебор строки по символьно, без регулярных именно так и делал бы.
3. использовать функцию которая слова возвращает из строки, но тут не уверен. останется проблема потом собрать эту строку снова со знаками препинания.
а как со str_replace сделать?
накидай плиз алгоритм хотябы словесно.
Спустя 35 минут, 47 секунд (18.04.2009 - 11:12) kirik написал(а):
Цитата (RealMan @ 18.04.2009 - 02:36) |
перебор строки по символьно |
Зачем посимвольно?
Цитата (RealMan @ 18.04.2009 - 02:36) |
а как со str_replace сделать? |
Ну наверное сделать разбор по словам.. Но это лишняя морока..
Спустя 1 час, 30 минут, 36 секунд (18.04.2009 - 12:42) RealMan написал(а):
Цитата (kirik @ 18.04.2009 - 14:12) |
|
Цитата | ||
Зачем посимвольно |
чтобы все слова выделялись за один проход по тексту,что-то вроде этого:
PHP |
function d123($st,$arr) |
в свою очередь функция два выполняет две задачи:
1. находит соответствие переданного слова в массиве
2. в сучае успеха - добавляет скобки к слову + удаляет это слово из массива
еще можно добавить условие в цикл, если массив пустой, то прибавить к строке остаток текста и выйти из цикла.
Цитата | ||
Ну наверное сделать разбор по словам.. Но это лишняя морока.. |
все равно не понимаю ... можешь накидать? заодно вдруг окажется полезным для ТС.
Спустя 4 часа, 58 минут (18.04.2009 - 17:40) kirik написал(а):
Цитата (RealMan @ 18.04.2009 - 04:42) |
все равно не понимаю ... можешь накидать? |
Дык я тоже не особо понимаю

Логично будет предположить как-то так:
1. Выделяем из текста все слова в массив паралельно переводя их в нижний регистр
2. С помощью функции array_intersect(); вытаскиваем общие значения с массивом заменяемых слов (который нужно тоже перевести в нижний регистр)
3. С помощью функции array_unique(); оставляем только уникальные значения
4. Берем ключи получившихся элементов и заменяем их в массиве слов на '['.$key.']'
5. ...не.. я так подумал, это не совсем подходит, да и str_replace тут не участвует нигде.. но идея богата
