我有一个看起来像这样的字符串:
position=®ion_id=&radius=&companytype=&employment=&scope=&salary_from=&salary_to=&pe
是否可以preg_replace以上字符串的所有不需要的部分,除了" radius ="和"范围=" ?
P.S。字符串中的所有查询参数可以以随机方式跟随。
答案 0 :(得分:2)
以下是满足您需求的有效解决方案:
<?php
$str = "position=®ion_id=&radius=&companytype=&employment=&scope=&salary_from=&salary_to=&pe";
// parse the string
parse_str($str,$output);
// unset the unwanted keys
unset($output['position']);
unset($output['region_id']);
unset($output['companytype']);
unset($output['employment']);
unset($output['salary_from']);
unset($output['salary_to']);
unset($output['pe']);
// transform the result to a query string again
$strClean = http_build_query($output);
echo $strClean;
?>
答案 1 :(得分:0)
如果您使用要保留为键的参数定义数组,则可以在array_intersect_key
之后使用parse_str
来仅获取这些参数,而无需显式删除所有不需要的参数。
$wanted_keys = array('radius' => 0, 'scope' => 0); // the values are irrelevant
parse_str($str, $parsed);
$filtered = array_intersect_key($parsed, $wanted_keys);
$result = http_build_query($filtered);
如果要将所需的键定义为值,可以使用array_flip
将它们转换为键。
function filterQuery($query, $wanted_keys) {
$wanted_keys = array_flip($wanted_keys);
parse_str($query, $parsed);
return http_build_query(array_intersect_key($parsed, $wanted_keys));
}
$result = filterQuery($str, array('radius', 'scope'));