[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Прошу помощи в решении 1 задачи.
RomikKazan
Всем привет! Заранее прошу прощения, если не в ту тему написал, я тут новичок, еще не совсем ориентируюсь...

В общем, такая задача:
есть строка $str

Эта строка содержит (в любом ее месте) одну из приведенных комбинаций:

/p/67893 или

/i/276489 или

&utm_source=p3278385

и т.д. (всего чуть более 100 комбинаций)

К каждой комбинации есть своя строка замены:
Если в строке $str содержится "/p/67893" , то заменяем на "/p/82585"
Если "/i/276489" , то заменяем на "/i/363937"
Если "&utm_source=p3278385" , то заменяем на "&utm_source=p7294715"
И т.д.

Если бы вариантов комбинаций было не так много, можно было бы использовать if - elseif, но тут чуть более 100....

Подскажите пожалуйста направление, каким способом лучше всего, быстрее, с наименьшей затратой ресурсов, решить данную задачу.

Заранее спасибо!



Спустя 43 минуты, 43 секунды (13.03.2011 - 14:25) imbalance_hero написал(а):
$arr1 = array();
$arr2 = array();
$text = str_replace($arr1,$arr2,$text);

Создаёшь 2 массива, и по индексам массива будут меняться их значения. Пропиши исходный вариант в arr1, и изменённый в arr2, это и будет твоим значением для изменения. Сама строка: $text.

Спустя 16 минут, 21 секунда (13.03.2011 - 14:41) RomikKazan написал(а):
Такс... Немного начал понимать. Как именно массивы создать? В array() что нужно занести? Можете пример написать с приведенными вариантами? Буду примного благодарен. Я только начинаю кодить на PHP, массивы изучал-изучал.. Но все-равно немного недопонимаю(

Спустя 54 минуты, 7 секунд (13.03.2011 - 15:35) imbalance_hero написал(а):
RomikKazan
Ну вот, повод изучить.
$arr1 = array('perviy','vtoroy','tretiy');
$arr2 = arrya('первый',"второй","третий");

Спустя 1 час, 19 минут, 1 секунда (13.03.2011 - 16:54) RomikKazan написал(а):
Ага, теперь дошла мысль. Но к чему нам заменять все значения из одного массива на значения другого, если нам только 1 нужно найти, и заменить на соответствующее ему значение из другого массива?

Спустя 6 минут, 47 секунд (13.03.2011 - 17:01) Trianon написал(а):
Заменить все - в данном случае значит - заменить все имеющиеся.
Если в строке всего одна - она и будет заменена.

Спустя 2 часа, 15 минут, 33 секунды (13.03.2011 - 19:17) RomikKazan написал(а):
Аааа, вот класс! Такое простое решение оказывается, а я то уже придумал как через пень колоду!.. :-D
Еще раз СПАСИБО!!!

Спустя 56 минут, 42 секунды (13.03.2011 - 20:13) RomikKazan написал(а):
Все работает, но только на одном месте споткнулся. Значение 'offer_id=[0-9]+' в массиве не воспринимается, как регулярное выражение, и нужной замены не происходит. Как можно поступить в таком случае?

Спустя 5 минут, 39 секунд (13.03.2011 - 20:19) Trianon написал(а):
Вы ж не сказали, что Вам по шаблону замена требуется.
А вернее настаивали на обратном - есть, мол, строгий список строк, и для каждого есть вариант замены.

читайте про функцию preg_replace() - она по шаблону регулярного выражения меняет текст.

preg_replace() с модификатором шаблона e
либо preg_replace_callback()

Спустя 45 минут, 18 секунд (13.03.2011 - 21:04) RomikKazan написал(а):
Ок, направление понял! Спасибо!
А не сказал, т.к. из всех 100 значений - такое только одно, и я почему-то про него сразу не подумал.
Быстрый ответ:

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