В общем, такая задача:
есть строка $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()
А вернее настаивали на обратном - есть, мол, строгий список строк, и для каждого есть вариант замены.
читайте про функцию preg_replace() - она по шаблону регулярного выражения меняет текст.
preg_replace() с модификатором шаблона e
либо preg_replace_callback()
Спустя 45 минут, 18 секунд (13.03.2011 - 21:04) RomikKazan написал(а):
Ок, направление понял! Спасибо!
А не сказал, т.к. из всех 100 значений - такое только одно, и я почему-то про него сразу не подумал.
А не сказал, т.к. из всех 100 значений - такое только одно, и я почему-то про него сразу не подумал.