Параметр Querystring explode Массив str_replace работает только для одного из разделителей

Я использую 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)));

Это работает, если разделитель является + знак, но не работает, если разделитель является - знак.

Кто-нибудь знает почему?

0

Решение

У вас есть вещи в неправильном порядке:

$last_wordPosition = end(explode(" ", str_replace(array('-', '+'), " ", $position)));

Вы, вероятно, хотите разделить его, чтобы не получить E_STRICT ошибка, когда переменная не передается end:

$words = explode(" ", str_replace(array('-', '+'), " ", $position));
echo end($words);

Или что-то вроде:

echo preg_replace('/[^+-]+(\+|-)/', '', $position);
1

Другие решения

Как @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);
0

Отвечая на мой собственный вопрос, чтобы показать, как я это сделал. Похоже, кода больше, чем принятого ответа, но, поскольку мне предложили использовать 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
0
По вопросам рекламы [email protected]