[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помогите реализовать
uglik
И если можно объясните поподробнее что мы и как делаем. За ранее благодарен.

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 написал(а):
Встречный вопрос: свои мысли какие? Ты ужО выскажи, не стесняйся smile.gif И тогда можно будет и помочь. Пока нету, чему помогать.

Спустя 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, надо оно кому или нет... Нас в своё время по научному коммунизму гоняли. biggrin.gif

Спустя 1 минута, 1 секунда (17.04.2009 - 13:04) uglik написал(а):
Мне нравится програмирование....а увлекаюсь этим 2 года.... просто может вы мне обесните немного по другому, что от меня требуется здеать...а я вам попробую сделать и вы меня проверите...

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

Господа... У нас тут есть смайлик "Я в шоке"??? Если нету, то надо вводить срочно blink.gif

Значит, объясняю. В задаче 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.

Спустя 35 секунд (17.04.2009 - 13:11) waldicom написал(а):
Цитата
У нас тут есть смайлик "Я в шоке"??? Если нету, то надо вводить срочно

Однозначно smile.gif

Спустя 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;
}

Спустя 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

А что за ошибка? Только не нужно в меня кидать камнями и гнилыми помидорами....я сюда за помощью пришел и хочу в этом разобраться....просто если бы мне было на это пофигу я бы и данный топик не открывал бы....обяснить мне эту некаму....
Те кто пришел поунижать новичка..прошу воздержаться от своих коментраниев...вспомните себя в начале, когда вы начинали и как порой бывает тяжело

Спустя 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 переведи на русский ошибку, думаю должен сам понять в чем проблема.

Спустя 25 минут, 24 секунды (17.04.2009 - 13:54) uglik написал(а):
Составленные таблицы 'пользователи' уже существуют

Так я же создаю новую...как они могут уже существовать???
RealMan а по проще написать решение первой задачи как нить можно??

Спустя 4 минуты, 59 секунд (17.04.2009 - 13:59) twin написал(а):
Сделай так:
Код
DROP TABLE `users`

и повтори свой запрос.

PS не то маненько... smile.gif Исправил.

Спустя 7 минут, 23 секунды (17.04.2009 - 14:06) uglik написал(а):
Все со втарым заданием я разобрался сам....
Зделал запрос к базе, отсартировал по дню рождения и написал выводить первые 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().

Или, говоря проще, не надо наворачивать (усложнять) там, где можно сделать просто.

Если автору вопроса это интересно (или неинтересно, но нужно)... Пусть подумает сам над реализацией smile.gif. А заодно может установить у себя хэлп по PHP (у меня в подписи есть ссылка).

Спустя 1 час, 34 минуты, 4 секунды (17.04.2009 - 18:07) RealMan написал(а):
Цитата (sergeiss @ 17.04.2009 - 19:33)
RealMan - в хэлпе сказано следующее насчет функции str_replace:
Цитата
Если не нужны сложные правила поиска/замены, использование этой функции предпочтительнее ereg_replace() или preg_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 года....

Уже не станет smile.gif

Цитата (uglik @ 17.04.2009 - 05:04)
просто может вы мне обесните немного по другому, что от меня требуется здеать...а я вам попробую сделать и вы меня проверите...

Первая задача - нужно пробежать по массиву слов, и с помощью регулярного выражения в заданной строке заменить каждое слово из массива (только одно, первое, судя по задаче) на это же слово в квадратных скобках. Просто доработай под себя то, что написал RealMan.

Спустя 3 часа, 7 минут, 12 секунд (18.04.2009 - 01:27) RealMan написал(а):
создай цикл который перебирает все элементы массива.
внутри цикла поставь 2 строки:

PHP
$a="#(^|\W)(".$word.")(\W|$)#i";
$st=preg_replace($a,"\$1[\$2]\$3",$st,1);


где $st - твоя строка про маму и раму smile.gif
$word - слово из массива.


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

Спустя 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)
Цитата (RealMan @ 17.04.2009 - 17:27)
но str_replace никак ваще не вписывается, хотя туплю может

Покажешь?


без 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)


Цитата
Цитата (RealMan @ 18.04.2009 - 02:36)
перебор строки по символьно

Зачем посимвольно


чтобы все слова выделялись за один проход по тексту,что-то вроде этого:

PHP
function d123($st,$arr)
{
$nst="";$b="";
for(
$i=0;$i<strlen($st);$i++)
    {
    
$a=substr($st,$i,1);
    if(
$a==' '||$a=='.'||$a==','||$a=='!'||$a==';'||$a=='?'||$a=='('||$a==')'||$a=='"'||$a=="'")
        {
        if(
$b!=""){$nst.=function2($b,$arr);$b="";}
        
$nst.=$a;
        }else {
$b.=$a;}
    }
return 
$nst;
}


в свою очередь функция два выполняет две задачи:
1. находит соответствие переданного слова в массиве
2. в сучае успеха - добавляет скобки к слову + удаляет это слово из массива


еще можно добавить условие в цикл, если массив пустой, то прибавить к строке остаток текста и выйти из цикла.

Цитата
Цитата (RealMan @ 18.04.2009 - 02:36)
а как со str_replace сделать?

Ну наверное сделать разбор по словам.. Но это лишняя морока..


все равно не понимаю ... можешь накидать? заодно вдруг окажется полезным для ТС.

Спустя 4 часа, 58 минут (18.04.2009 - 17:40) kirik написал(а):
Цитата (RealMan @ 18.04.2009 - 04:42)
все равно не понимаю ... можешь накидать?

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

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.