2010-11-21 18 views
1

Extension de ma question d'origine here: Je souhaite maintenant supprimer plus d'une variable de la chaîne de requête. Par exemple, je veux supprimer les variables bar1 & bar2 de la chaîne querys. J'ai essayé le code suivant:Supprimer une valeur d'une chaîne de requête Partie 2

echo parseQueryString("http://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'],"bar2","bar1"); 

Mais cela ne supprime pas les deux variables, que bar2.

Toute aide appréciée.

Merci,

Matt

Répondre

2

Vous serez vouloir quelque chose comme

echo parseQueryString(parseQueryString("http://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'],"bar2"),"bar1"); 

Alternativement, puisque je suppose parseQueryString est une fonction définie, vous pouvez le changer il accepte un argument tableau et boucle sur le tableau.

+0

Cela a fonctionné parfaitement, merci beaucoup !! – Matt

3

J'utiliser

  • parse_str($_SERVER["QUERY_STRING"], $array); de démonter la chaîne de requête

  • unset($array["bar1"]); pour supprimer les variables indésirables

  • http_build_query($array); pour coller la chaîne de requête de retour ensemble

+0

Merci pour votre réponse! – Matt

1

J'ai créé une nouvelle fonction qui fonctionne avec plusieurs paramètres.

<?php 
function parseQueryString($url,$remove_arr) { 
    $infos=parse_url($url); 
    $str=$infos["query"]; 
    $op = array(); 
    $pairs = explode("&", $str); 
    foreach ($pairs as $pair) { 
     list($k, $v) = array_map("urldecode", explode("=", $pair)); 
     $op[$k] = $v; 
    } 
    foreach($remove_arr as $remove){ 
     if(isset($op[$remove])){ 
      unset($op[$remove]); 
     } 
    } 

    return str_replace($str,http_build_query($op),$url); 

} 
echo parseQueryString("http://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'],array("bar2","bar1")); 
?> 
+0

C'est génial, ça fonctionne aussi, merci beaucoup. – Matt

0

Je ne pense pas que la fonction parseQueryString fonctionnera pour les chaînes de requête avec des composants de réseau tels que &bar[]=5&bar[]=12 etc. Je pense que tous, mais on pourrait radiées du résultat.

+0

Bienvenue sur StackOverflow et merci de poster. Malheureusement, cela ne répond pas vraiment à la question. S'il vous plaît jeter un oeil à [Comment répondre] (http://stackoverflow.com/questions/how-to-answer). –