Подтвердить что ты не робот

Преобразование строки запроса в ассоциативный массив

В 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;
  }
}
4b9b3361

Ответ 1

Вы можете получить только атрибуты из 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

Ответ 2

Если вы имеете в виду то, что вы написали, то это очень просто и не нуждается ни в чем другом, в PHP есть предопределенная переменная Superglobal $_GET, которая сама представляет всю строку запроса как ассоциативный массив ключей, пар значений.

Пример:

// 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

Ответ 3

$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);

Ответ 4

Попробуйте использовать parse_url

Ответ 5

foreach ($_GET as $key => $value) $arr["$key"]= $value;