[英]PHP Retrieve Keys From Query String, For each key: create URL removing that key from query string
更新:
感謝Hakre和Martino的回答:這個功能現在有了更好的效果:
$queryString = $_SERVER['QUERY_STRING'];
parse_str($queryString, $params);
foreach ($params as $key => $term)
{
$tags = explode(' ',$term);
$tagCount = count($tags);
//If there is more than one term per key, break them up
if($tagCount > 1) {
foreach($tags as $tag) {
if($term != '') {
//remove individual term from query string and remove any redundant characters
$urlx = str_replace($tag, '', $queryString);
$urlx = str_replace(array('=+', '++', '+&'), array('=', '+', '&'), $urlx);
if(substr($urlx, -1) == '+'){
$urlx = substr($urlx,0,-1);
}
echo '<a href="?'.$urlx.'">'.$tag.'</a><br/>';
}
}
} else {
//If there's just one term per key get rid of the key/term pair
$these = array_diff_assoc($params, array($key => $term));
printf("<a href=\"?%s\">%s</a><br>\n", http_build_query($these), $term);
}
}
如果有人有任何進一步的建議,使這個片段更好,我真的很感激!
謝謝
原始問題
我正在嘗試創建一個允許用戶“X out”或清除給定搜索過濾器的功能。 我編寫了一個函數(以一種非常駭人的方式),該函數從每個GET變量中獲取鍵,然后創建一個從搜索字符串中刪除該鍵的URL。
有沒有人有更好或更優雅的方式來寫這個?
謝謝
<?php
$queryString = $_SERVER['QUERY_STRING'];
$getArray = explode("=", $queryString);
foreach($getArray as $get) {
$tagArray = explode("+",$get);
foreach($tagArray as $tag){
$pos = strpos($tag,'=');
if($pos === false) {
$urlx = str_replace($tag, '', $queryString);
$urlx = str_replace('=+','=',$urlx);
$urlx = str_replace('++','+',$urlx);
$urlx = str_replace('+&','&',$urlx);
echo '<a href="?'.$urlx.'">'.$tag.'</a><br/>';
}
else {
$term = explode('=',$tag);
$urlx = str_replace($term[1], '', $queryString);
$urlx = str_replace('=+','=',$urlx);
$urlx = str_replace('++','+',$urlx);
$urlx = str_replace('+&','&',$urlx);
echo '<a href="?'.$urlx.'">'.$term[1].'</a><br/>';
}
}
}
?>
示例輸出如下:
查詢字符串: ?style=automotive&type=commercial+residential
HTML輸出:
<a href="?type=commercial+residential">automotive</a><br/>
<a href="?style=automotive&type=residential">commercial</a><br/>
<a href="?style=automotive&type=commercial">residential</a><br/>
PHP內置了用於解決問題的函數,一個用於解析查詢字符串,另一個用於再次編譯: parse_str
和http_build_query
:
parse_str($queryString, $params);
foreach ($params as $key => $term)
{
$these = array_diff_assoc($params, array($key => $term));
printf("<a href=\"?%s\">%s</a><br>\n", http_build_query($these), $term);
}
示例輸出:
<a href="?b=b&c=c">a</a><br>
<a href="?a=a&c=c">b</a><br>
<a href="?a=a&b=b">c</a><br>
您可以確定做的一件事是利用str_replace
函數接受數組:
$urlx = str_replace('=+','=',$urlx);
$urlx = str_replace('++','+',$urlx);
$urlx = str_replace('+&','&',$urlx);
變
$urlx = str_replace(array('=+', '++', '+&'), array('=', '+', '&'), $urlx);
else
部分也一樣
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.