Использование PHP для получения строки URL

Вот мой URL:

http://www.mywebsite.com/local/cityname-free-services

я использую

$url = $_SERVER['REQUEST_URI'];
$check = end(explode('/local/',$url));
$check = strtoupper($check);
echo $check;

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

CITYNAME-FREE-SERVICES

когда все, что я хочу повторить это:

CITYNAME

Что мне нужно изменить в коде, чтобы просто получить название города?

Кроме того, у некоторых названий городов есть тире, и мне нужно заменить их пустым пространством при отражении. Что нужно добавить для этого? Спасибо!

4 ответа

Решение

Вы хотите снова взорвать полученную строку с - и сохранить первый элемент, что-то вроде

$url = $_SERVER['REQUEST_URI'];
$check = end(explode('/local/',$url));
$check = current(explode('-', strtoupper($check)));
echo $check;

Таким образом, если последняя часть изменится, у вас останется CITYNAME действительный.

Еще немного объяснений, explode (документация здесь) разбивает строку на элементы массива и разбивает ее, используя первый параметр, поэтому в этом случае передача - создаст массив из 3 элементов, CITYNAME, FREE а также SERVICES, current (документация здесь) возьмет текущую позицию в массиве и вернет это значение, по умолчанию текущая позиция находится на первом элементе. Вы также можете индексировать отдельные элементы в вашем массиве, так что explode('-', strtoupper($check))[0] также даст вам CITYNAMEи используя [1] а также [2] даст вам FREE а также SERVICES,

Изменить: я не видел черту о названиях городов. Это немного усложняет проблему, так как ваш URL содержит другие тире, от которых вы хотите избавиться. Если "-FREE-SERVICES" постоянна, и это всегда та часть, от которой вы хотите избавиться, то делать то, что предложил cale_b, - хорошая идея, которая должна заменить "free-services" с "", Так что я +1 его ответ.

Редактировать 2: По какой-то причине мой ответ был выбран, для имен с тире вам нужно будет сделать что-то похожее на то, что предложил cale_b!

Один из нескольких способов. Кто-то здесь, вероятно, покажет вам некоторые регулярные выражения, которые делают лучше, но это удалит "бесплатные сервисы", а также заменит дефисы пробелами:

$url = $_SERVER['REQUEST_URI'];
$check = end(explode('/local/',$url));
$check = strtoupper(str_ireplace("free-services", "", $check));
echo str_replace("-", " ", $check);
$url = 'http://www.mywebsite.com/local/cityname-free-services';
$check = end(explode('/local/',$url));
$check = strtoupper($check);
echo $check; // prints CITYNAME-FREE-SERVICES
echo '<br>';
$first_element = strtoupper(str_ireplace(array("-free-services","-"),array(""," "),$check));
echo $first_element; // prints CITYNAME
$url = $_SERVER['REQUEST_URI'];
$check = end(explode('/local/',$url));
$check = strtoupper($check);
$check = explode("-", $check);
echo $check[0];
Другие вопросы по тегам