You are here

function parse_query in Zircon Profile 8

Same name and namespace in other branches
  1. 8.0 vendor/guzzlehttp/psr7/src/functions.php \GuzzleHttp\Psr7\parse_query()

Parse a query string into an associative array.

If multiple values are found for the same key, the value of that key value pair will become an array. This function does not parse nested PHP style arrays into an associative array (e.g., foo[a]=1&foo[b]=2 will be parsed into ['foo[a]' => '1', 'foo[b]' => '2']).

Parameters

string $str Query string to parse:

bool|string $urlEncoding How the query string is encoded:

Return value

array

File

vendor/guzzlehttp/psr7/src/functions.php, line 498

Namespace

GuzzleHttp\Psr7

Code

function parse_query($str, $urlEncoding = true) {
  $result = [];
  if ($str === '') {
    return $result;
  }
  if ($urlEncoding === true) {
    $decoder = function ($value) {
      return rawurldecode(str_replace('+', ' ', $value));
    };
  }
  elseif ($urlEncoding == PHP_QUERY_RFC3986) {
    $decoder = 'rawurldecode';
  }
  elseif ($urlEncoding == PHP_QUERY_RFC1738) {
    $decoder = 'urldecode';
  }
  else {
    $decoder = function ($str) {
      return $str;
    };
  }
  foreach (explode('&', $str) as $kvp) {
    $parts = explode('=', $kvp, 2);
    $key = $decoder($parts[0]);
    $value = isset($parts[1]) ? $decoder($parts[1]) : null;
    if (!isset($result[$key])) {
      $result[$key] = $value;
    }
    else {
      if (!is_array($result[$key])) {
        $result[$key] = [
          $result[$key],
        ];
      }
      $result[$key][] = $value;
    }
  }
  return $result;
}