Задать вопрос
@Alex-Broudy

Как из адресной строки вытащить из url нужное значение?

Здравствуйте!

Подскажите пожалуйста что не так?

Есть код с массивом городов, цель которого получить из ссылки нужное значение, сравнить его с значениями в массиве и при совпадении заменить его на другое значение:
// Примечание: изначально для определения ссылки в адресной строке использую REQUEST_URI
// $url = $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
$url = 'https://mysite.ru/uzlovaya/products';

	$cities_list = [
		// 'moscow'=> ['IP'=>'Москва', 'RP'=>'Москве'],
		// 'novosibirsk'=>['IP'=>'Новосибирск', 'RP'=>'Новосибирске'],
		// 'arhangelsk'=> ['IP'=>'Архангельск', 'RP'=>'Архангельске'],
		// 'balahna'=> ['IP'=>'Балахна', 'RP'=>'Балахне'],
		// 'uzlovaya'=> ['IP'=>'Узловая', 'RP'=>'Узловой'],
		// 'rostov-na-donu'=> ['IP'=>'Ростов-на-Дону', 'RP'=>'Ростове-на-Дону'],
		'uzlovaya'=>'Узловой'
	];
$text = $url;
echo ( str_replace(array_keys($cities_list ), array_values($cities_list ), $text) );

который для строчки $url = 'https://mysite.ru/uzlovaya/products';заменяет "uzlovaya" на "Узловой", только делает это таким образом: https://mysite.ru/Узловой/products

Здесь str_replace отрабатывает хорошо, но как мне убрать все остальное, чтобы оставалось в итоге замененное значение "Узловой" и ничего вокруг него?

И как вывод осуществлять через str_replace если используется такой вид массива?
'uzlovaya'=> ['IP'=>'Узловая', 'RP'=>'Узловой'],
  • Вопрос задан
  • 2170 просмотров
Подписаться 1 Простой 14 комментариев
Решения вопроса 1
@Alex-Broudy Автор вопроса
Разобрался.
1. Определил url в адресной строке
2. Разбил url на массив и убрал у значений - "/"
3. Определил номер ключа, который соответствует значению города - $city_name[2];
( [2] - означает, что нужное мне значение является вторым по счету)
4. Используя str_replace из массива $custom_cities заменил полученное значение на необходимое и вывел его на странице.

$url = $_SERVER['REQUEST_URI'];
$city_name = explode("/", $url);
$custom_cities = [
 // массив городов может быть и 100 и 200 городов и более
'domodedovo' => 'Домодедово',
'uzlovaya' => 'Узловой',
'rostov-na-donu' => 'Ростове-на-Дону'
];
 $text = $city_name[2];
echo ( str_replace(array_keys($custom_cities), array_values($custom_cities), $text) );
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
skobkin
@skobkin
Гентушник, разработчик на PHP и Symfony.
lmgtfy.com/?q=php+routing

Конкретные примеры:
Symfony Routing (см. "placeholders")
PhpLeague Route (см. "Wildcard Routes")
Aura.Router

В вашем случае должен быть определён маршрут типа:
/{city_name}/products (это на примере Symfony Routing, в других смысл радикально отличаться не будет)

Далее в случае попадания запроса на этот маршрут вы передаёте нужному контроллеру данные - в данном случае значение параметра city_name и там уже работает логика связанная с обработкой разных городов.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы