Я использую explode и str_replace в параметре get URL-адреса строки запроса. Моя цель — разделить строки по определенным символам, чтобы получить значение в строке, которую я хочу. У меня проблемы. Это должно работать, но не работает.
Вот два примера ссылок со строками запроса и разделителями, которые я использую для str_replace.
http://computerhelpwanted.com/jobs/?occupation=analyst&position=data-analyst
Как видно из приведенного выше URL, параметр является позицией, а значение — аналитиком данных. Разделителем является тире -
,
http://computerhelpwanted.com/jobs/?occupation=analyst&position=business+systems+analyst
и этот URL выше использует тот же параметр position
и ценность это бизнес + системы + аналитик. Разделитель является +
знак.
Значение, которое я пытаюсь получить из строки запроса, — это слово «аналитик». Это последнее слово после разделителей.
Вот мой код, который должен помочь, но по какой-то причине этого не происходит.
$last_wordPosition = str_replace(array('-', '+')," ", end(explode(" ",$position)));
Это работает, если разделитель является +
знак, но не работает, если разделитель является -
знак.
Кто-нибудь знает почему?
У вас есть вещи в неправильном порядке:
$last_wordPosition = end(explode(" ", str_replace(array('-', '+'), " ", $position)));
Вы, вероятно, хотите разделить его, чтобы не получить E_STRICT
ошибка, когда переменная не передается end
:
$words = explode(" ", str_replace(array('-', '+'), " ", $position));
echo end($words);
Или что-то вроде:
echo preg_replace('/[^+-]+(\+|-)/', '', $position);
Как @MarkB предложил вам использовать parse_url а также parse_str так как это более уместно в вашем случае.
Из документации parse_url:
Эта функция анализирует URL-адрес и возвращает ассоциативный массив, содержащий любые из имеющихся компонентов URL-адреса.
Из документации parse_str:
Анализирует str, как если бы это была строка запроса, переданная через URL, и устанавливает переменные в текущей области видимости.
Итак, вот что вы хотите сделать:
$url1 = 'http://computerhelpwanted.com/jobs/?occupation=analyst&position=data-analyst';
$url2 = 'http://computerhelpwanted.com/jobs/?occupation=analyst&position=business+systems+analyst';function mySplit($str)
{
if (preg_match('/\-/', $str))
$strSplited = split('-', $str);
else
$strSplited = split(' ', $str);
return $strSplited;
}
parse_str(parse_url($url1)['query'], $output);
print_r($values = mySplit($output['position']));
parse_str(parse_url($url2)['query'], $output);
print_r($values = mySplit($output['position']));
ВЫХОД
Array
(
[0] => data
[1] => analyst
)
Array
(
[0] => business
[1] => systems
[2] => analyst
)
Вы сказали, что вам нужен последний элемент этих значений. Поэтому вы могли бы найти конец а также сброс полезно:
echo end($values);
reset($values);
Отвечая на мой собственный вопрос, чтобы показать, как я это сделал. Похоже, кода больше, чем принятого ответа, но, поскольку мне предложили использовать parse_url и parse_str, но я не смог заставить его работать правильно, я сделал это по-другому.
function convertUrlQuery($query) {
$queryParts = explode('&', $query);
$params = array();
foreach ($queryParts as $param) {
$item = explode('=', $param);
$params[$item[0]] = $item[1];
}
return $params;
}
$arrayQuery = convertUrlQuery($_SERVER['QUERY_STRING']); // Returns - Array ( [occupation] => designer [position] => webmaster+or+website-designer )
$array_valueOccupation = $arrayQuery['occupation']; // Value of occupation parameter
$array_valuePosition = $arrayQuery['position']; // Value of position parameter
$split_valuePosition = explode(" ", str_replace(array('-', '+', ' or '), " ", $array_valuePosition)); // Splits the value of the position parameter into separate words using delimeters (- + or)
затем для доступа к различным частям массива
print_r($arrayQuery); // prints the array
echo $array_valueOccupation; // echos the occupation parameters value
echo $array_valuePosition; // echos the position parameters value
print_r($split_valuePosition); // prints the array of the spitted position parameter
foreach ($split_valuePosition as $value) { // foreach outputs all the values in the split_valuePosition array
echo $value.' ';
}
end($split_valuePosition); // gets the last value in the split_valuePosition array
implode(' ',$split_valuePosition); // puts the split_valuePosition back into a string with only spaces between each word
который выводит следующее
arrayQuery = Array
(
[occupation] => analyst
[position] => data-analyst
)
array_valueOccupation = analyst
array_valuePosition = data-analyst
split_valuePosition = Array
(
[0] => data
[1] => analyst
)
foreach split_valuePosition =
- data
- analyst
end split_valuePosition = analyst
implode split_valuePosition = data analyst