web-dev-qa-db-fra.com

Conversion d'une chaîne de requête en un tableau associatif

En PHP, j'ai besoin d'une fonction pour convertir une chaîne de requête à partir d'une URL, par exemple: http://example.com?key1=value1&key2=value2 dans un tableau associatif PHP: array ['key1' => 'value1', 'key2' => 'value2'].

Je suis venu à ce morceau de code. Cela fonctionne, mais je le trouve un peu long. (Et PHP a des fonctions intégrées pour tout: je suis surpris de n'avoir rien trouvé de concret, quelque chose comme l'inverse de http_build_query.)

Pouvez-vous suggérer un meilleur moyen de le faire?

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;
  }
}

Vous pouvez obtenir uniquement les attributs d'une URL à l'aide de parse_url ()

Une fois que vous avez cela, vous pouvez utiliser parse_str () pour les convertir en variables, cela fonctionne aussi avec les tableaux multidimensionnels!

$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
53
472084

Si vous voulez dire ce que vous avez écrit, alors c'est très simple et vous n'avez besoin de rien d'autre, il existe une variable Superglobal prédéfinie $_GET dans PHP qui représente elle-même toute la chaîne de requête sous forme de tableau associatif clé/valeur.

Exemple:

// current page URI: http://localhost/test.php?key1=value1&key2=value2

echo '<pre>';
print_r($_GET);
echo '</pre>';

Résultat:

Array(
    [key1] = value1
    [key2] = value2
)

Pour plus d'informations sur $_GET PHP, superglobal goto: http://php.net/manual/en/reserved.variables.get.php

1
MNR
$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);
0
user3454065