将查询字符串转换为关联数组

Nic*_*uin 26 php query-string

在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;
  }
}
Run Code Online (Sandbox Code Playgroud)

472*_*084 54

您可以使用parse_url()从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
Run Code Online (Sandbox Code Playgroud)

  • `parse_str`并不总是理想的解决方案,因为包含像`user.name`这样的点的查询字符串参数将被转换为`user_name`,因为PHP不支持包含点的变量名 (3认同)
  • `parse_str`?功能名称根本不明确,但就是这样! (2认同)