Aus einem QueryString (z.B. dem $_GET) nicht gewollte Parameter löschen:
function stripArrayKey($sInput, $arrKeysToStrip = array()) {
if (count($arrKeysToStrip)<=0) {
return $sInput;
}
$arrResult = array();
parse_str($sInput, $arrResult);
foreach ($arrKeysToStrip AS $keyName) {
if (array_key_exists($keyName, $arrResult)) {
unset($arrResult[$keyName]);
}
}
return http_build_query($arrResult);
}
Vorher:
param1=value¶m2=otherValue&myParam=unwanted¶m3=moreValue
return stripArrayKey($sQuerystring, array('myParam','param2'));
Nachher:
param1=value¶m3=moreValue
Wahlweise auch gleich viele Parameter auf einen Rutsch.
Cool, parse_str kannte ich noch garnicht. Trotzdem wird count nie kleiner als 0 zurückgeben 😉
Ich überlege gerade wo ich diesen Fall brauchen könnte, ich würde eher eine Liste mit benötigten Parametern übergeben wollen und nur diese zurückbekommen. Sonst übergibt irgendein Trottel mal einen weiteren Parameter und mein Script kommt durcheinander. Also eher eine Art Whiteliste und keine Blacklist.
$resultQuery ist unbenutzt und kann weg
Statt der foreach Schleife könntest du auch das hier nutzen:
$arrResult = array_diff_key($arrResult, array_flip($arrKeysToStrip));
Bei den kleinen Arrays die verwendet werden aber wahrscheinlich kein messbarer Unterschied 🙂
@Michael: Danke wegen $resultQuery, das geisterte noch aus der Ursprungsfassung dort herum, habe es schlicht übersehen 😉
Zur Whitelist: Da könnte man ein filterArrayByKeylist-Snippet draus machen 😉
Wo man das braucht: Das hier in einer Mod zu einem OpenSource-Shopsystem, um bestimmte Parameter raus zu filtern, die ich vorher (absichtlich und mit guten Gründen) dort hereingebracht habe.