Элегантное решение для чтения и преобразования строки запроса в php? - PullRequest
1 голос
/ 09 февраля 2010

У меня есть строка запроса, такая как:

file.php?search=keyword+here&genre1=1&genre4=1&genre19=1&genre181&director=436&actor=347&search_rating=3

Мне нужно извлечь все жанры, упомянутые в строке, в данном случае это

genre1, genre4, genre19 and genre18

и выведите их в строку типа

ge1_ge4_ge19_ge18

Что было бы хорошим решением для этого?

Ответы [ 3 ]

2 голосов
/ 09 февраля 2010

Если вы хотите, чтобы параметры, передаваемые строкой запроса в текущий исполняемый скрипт, вам просто нужно:

$genres = preg_grep('!^genre!', array_keys($_GET));
$out = implode('_', $genres);

Здесь вы отфильтровываете все параметры, которые начинаются с genre с использованием preg_grep(), и получаете список имен параметров с использованием array_keys().

Если у вас есть URL-адрес, который необходимо проанализировать, используйте этот фрагмент:

$url = 'file.php?search=keyword+here&genre1=1&genre4=1&genre19=1&genre181&director=436&actor=347&search_rating=3';
$query = parse_url($url, PHP_URL_QUERY);
parse_str($query, $params);
$genres = preg_grep('!^genre!', array_keys($params));
echo implode('_', $genres);

Разница в том, что вы используете parse_url() для извлечения строки запроса и parse_str() для разбора строки запроса.

Выход:

genre1_genre4_genre19_genre181
2 голосов
/ 09 февраля 2010

parse_str () с необязательным аргументом $arr специально создан для правильного взрыва строки запроса:

Анализирует str, как если бы это была строка запроса, переданная через URL, и устанавливает переменные в текущей области видимости.

Может работать даже с аргументами массива.

http_build_query () может склеивать массив обратно с пользовательским $arg_separator, но чтобы получить вывод именно так, как вам нужно, вам придется вручную перебирать аргументы сделать преобразование.

0 голосов
/ 09 февраля 2010

Вы можете взорваться на '=', а затем присоединиться к '_'.

...