在php中读取和转换查询字符串的优雅解决方案?

在php中读取和转换查询字符串的优雅解决方案?,php,query-string,Php,Query String,我有这样一个查询字符串: file.php?search=keyword+here&genre1=1&genre4=1&genre19=1&genre181&director=436&actor=347&search_rating=3 我需要提取字符串中提到的所有类型,在本例中是 genre1, genre4, genre19 and genre18 并将它们输出为字符串,如 ge1_ge4_ge19_ge18 有什么好的解决办法 您

我有这样一个查询字符串:

file.php?search=keyword+here&genre1=1&genre4=1&genre19=1&genre181&director=436&actor=347&search_rating=3
我需要提取字符串中提到的所有类型,在本例中是

genre1, genre4, genre19 and genre18
并将它们输出为字符串,如

ge1_ge4_ge19_ge18

有什么好的解决办法

您可以在“=”上分解,然后在“.”上联接。

您可以在“=”上分解,然后在“.”上联接。

如果您希望通过查询字符串将参数传递给当前执行的脚本,那么您只需:

$genres = preg_grep('!^genre!', array_keys($_GET));
$out = implode('_', $genres);
在这里,您将使用筛选出所有以流派开头的参数,并使用获取参数名称列表

如果您有需要解析的URL,请使用以下代码段:

$url = 'file.php?search=keyword+here&genre1=1&genre4=1&genre19=1&genre181&director=436&actor=347&search_rating=3';
$query = parse_url($url, PHP_URL_QUERY);
parse_str($query, $params);
$genres = preg_grep('!^genre!', array_keys($params));
echo implode('_', $genres);
这里的区别在于,您可以使用它来提取查询字符串和解析查询字符串

输出:

genre1_genre4_genre19_genre181

如果希望通过查询字符串将参数传递给当前正在执行的脚本,则只需:

$genres = preg_grep('!^genre!', array_keys($_GET));
$out = implode('_', $genres);
在这里,您将使用筛选出所有以流派开头的参数,并使用获取参数名称列表

如果您有需要解析的URL,请使用以下代码段:

$url = 'file.php?search=keyword+here&genre1=1&genre4=1&genre19=1&genre181&director=436&actor=347&search_rating=3';
$query = parse_url($url, PHP_URL_QUERY);
parse_str($query, $params);
$genres = preg_grep('!^genre!', array_keys($params));
echo implode('_', $genres);
这里的区别在于,您可以使用它来提取查询字符串和解析查询字符串

输出:

genre1_genre4_genre19_genre181
使用可选的$arr参数,该参数专门用于正确分解查询字符串:

将str解析为通过URL传递的查询字符串,并在当前范围内设置变量

它甚至可以处理数组参数

可以使用自定义的$arg_分隔符将数组粘合在一起,但要获得所需的特定输出,必须手动迭代参数以进行转换

带有可选的$arr参数,专门用于正确分解查询字符串:

将str解析为通过URL传递的查询字符串,并在当前范围内设置变量

它甚至可以处理数组参数


可以使用自定义的$arg_分隔符将数组粘合在一起,但要获得所需的特定输出,必须手动迭代参数以进行转换

这是多大的CPU密集度?preg有点慢,不是吗?如果不在一个循环中使用数千次,完全、完全无害。+1表示好的、准备运行的解决方案。只是缺少到ge_xxx的转换,但OP尚未定义该转换。@Yegor:preg_grep是一种方便。不需要使用循环和检查数组键的起始位置,就可以完成此操作,但除非在单个脚本执行过程中执行了数万次,否则根本不值得担心。这需要多少CPU?preg有点慢,不是吗?如果不在一个循环中使用数千次,完全、完全无害。+1表示好的、准备运行的解决方案。只是缺少到ge_xxx的转换,但OP尚未定义该转换。@Yegor:preg_grep是一种方便。不需要使用循环和检查数组键的开头,就可以完成此操作,但除非在单个脚本执行中执行了成千上万次,否则根本不值得担心。