Disons que je reçois des demandes telles que:
http://www.example.com/index.php?id=123&version=3&id=234&version=4
Est-il possible de les extraire de manière simple dans mon code php? Je me rends compte que je pourrais obtenir l'intégralité de la chaîne de requête avec javascript à l'aide de window.location.href et la gérer manuellement, mais je recherche quelque chose de plus élégant. Les requêtes peuvent contenir un nombre illimité de paires version/id, mais je peux supposer que la requête est bien formée et n’a aucune obligation de gérer des chaînes non valides.
Selon ce commentaire du manuel PHP , l'analyseur de chaîne de requête PHP supprimera les paramètres en double ... donc je ne pense pas que PHP convienne parfaitement pour ce que vous voulez faire (sauf qu'il a la même capacité que javascript pour obtenir la chaîne de requête brute, avec laquelle vous pouvez faire ce que vous voulez)
Si vous pouvez modifier le nom du champ pour inclure []
, alors PHP créera un tableau contenant toutes les valeurs correspondantes:
http://www.example.com/index.php?id[]=123&version[]=3&id[]=234&version[]=4
Si vous n'avez pas la possibilité de changer les noms de champs, alors comme vous le dites, vous devrez analyser la chaîne de requête vous-même.
En supposant que vous ayez un certain contrôle sur la requête, ajoutez le suffixe []
et le nom PHP qui générera des tableaux au lieu de tout supprimer sauf un.
http://www.example.com/index.php?id[]=123&version[]=3&id[]=234&version[]=4
Puisqu'ils sont paires , vous voudrez probablement corriger l'ordre dans lequel ils apparaissent en utilisant des index.
http://www.example.com/index.php?id[0]=123&version[0]=3&id[1]=234&version[1]=4
Il suffit d'extraire les clés et les valeurs de $ _GET, utilisez la fonction comme:
print_array('$_GET...',$_GET);
... et le code de fonction sera:
function print_array($title, $arr) {
echo '<table width="100%" style="padding:10;">';
echo '<tr><td width="30%" style="text-align:right; background-color:bisque;">key of </td><td style="background-color:bisque;">'.$title.'</td></tr>';
foreach($arr as $key => $value) {
echo '<tr>';
echo '<td style="text-align:right; color:grey;">';
echo $key;
echo '</td>';
echo '<td>';
echo $value;
echo '</td>';
echo '</tr>';
}
echo '</table>';
}
Pas aussi complet ni aussi fiable que les méthodes mentionnées ci-dessus, mais je l’utilise pour supprimer le besoin de []
dans les URL sans me soucier de la réécriture.
$aQuery = explode("&", $_SERVER['QUERY_STRING']);
$aQueryOutput = array();
foreach ($aQuery as $param) {
if(!empty($param)){
$aTemp = explode('=', $param, 2);
if(isset($aTemp[1]) && $aTemp[1] !== ""){
list($name, $value) = explode('=', $param, 2);
$aQueryOutput[ strtolower(urldecode($name)) ][] = urldecode(preg_replace('/[^a-z 0-9\'+-]/i', "", $value));
}
}
}