В PHP мне нужна функция для преобразования запроса с URL-адреса, например: http://example.com?key1=value1&key2=value2
в ассоциативный массив PHP: array ['key1' => 'value1', 'key2' => 'value2']
.
Я подошел к этой части кода. Он работает, но я нахожу его немного длинным. (И PHP имеет встроенные функции для всего: я удивлен, что я не нашел ничего из коробки, что-то вроде обратного http_build_query
.)
Можете ли вы предложить лучший способ сделать это?
function getUrlParams($url) { $querystring = parse_url($url, PHP_URL_QUERY); $a = explode("&", $querystring); if (!(count($a) == 1 && $a[0] == "")) { foreach ($a as $key => $value) { $b = explode("=", $value); $a[$b[0]] = $b[1]; unset ($a[$key]); } return $a; } else { return false; } }
Вы можете получить только атрибуты из URL-адреса, используя parse_url ()
После этого вы можете использовать parse_str () для преобразования их в переменные, он также работает с многомерными массивами!
$str = "first=value&arr[]=foo+bar&arr[]=baz"; parse_str($str, $output); echo $output['first']; // value echo $output['arr'][0]; // foo bar echo $output['arr'][1]; // baz
Если вы имеете в виду то, что вы написали, то это очень просто и не нуждается ни в чем другом, существует предопределенная переменная Superglobal $_GET
в PHP, которая сама представляет всю строку запроса как ассоциативный массив ключей, значений.
Пример:
// current page URI: http://localhost/test.php?key1=value1&key2=value2 echo '<pre>'; print_r($_GET); echo '</pre>';
Результат:
Array( [key1] = value1 [key2] = value2 )
Для получения дополнительной информации о $_GET
PHP superglobal goto: http://php.net/manual/en/reserved.variables.get.php
$url = 'http://example.com?key1=value1&key2=value2&key3=value3'; preg_match_all('/\w+=.*/',$url,$matches); parse_str($matches[0][0], $output); print_r($output);
Попробуйте использовать parse_url
foreach ($_GET as $key => $value) $arr["$key"]= $value;