2010-10-19 151 views
1

我正在爲我的搜索頁面構建一個過濾器部分,我想知道查詢字符串的最佳做法。我的問題是,這些鏈接功能很像複選框,所以一些,全部或沒有可以打開。我必須遍歷大約30個左右的鏈接,根據其狀態刪除或添加特定鏈接的值。構建查詢字符串鏈接

我首先考慮的是:

我應該通過陣列狀

colors=red,blue,green //explode?

colors[]=red&colors[]=blue&colors[]=green //parse_str?

的是換掉某個陣列的一定值作爲最快/最好的方法,我通過每個鏈接循環?我想用我上面發佈的第二種方法會更復雜一點,是的?



EDIT2 - 你覺得這是什麼?

我碰到一個在線教程,並用此來了:

 
function remove($filters = array(), $remove_key = NULL, $remove_val = NULL) 
    { 
     if($remove_key != NULL && array_key_exists($remove_key,$filters)) 
     { 
      if($remove_val != NULL && array_key_exists($remove_val,array_flip($filters[$remove_key]))) 
      { 
       $filters[$remove_key] = array_diff($filters[$remove_key],array($remove_val)); 
      } else { 
       unset($filters[$remove_key]); 
      } 
     } 
     return http_build_query($filters); 
    } 

目前,我可以通過$ remove_key刪除鍵和$ remove_val從取消導航鍵的值在一個數組中。

你們認爲什麼?這對於做30-50個鏈接會太慢嗎?謝謝!

+2

注意,在你的第二個例子中,你不必叫'parse_str'; PHP會爲你提供一個數組''_GET ['colors']'。 – meagar 2010-10-19 13:50:37

回答

3
colors[]=red&colors[]=blue&colors[]=green 

將是表單提交數據的方式(當method =「get」時)。你可以通過$ _GET ['colors']來訪問它,這是本地的,也可能是最快的方式。

編輯:獲得通過http_build_query該字符串只需填寫他們在陣列彩色

$data = array('colors' => array('green','red','blue')); 
echo http_build_query($data); // colors[0]=green&colors[1]=red&colors[2]=blue 
+0

+1:更不用說它不需要JavaScript來組裝。這是最便攜的方法(因爲所有的瀏覽器應該能夠處理它)... – ircmaxell 2010-10-19 14:01:20

+1

@ircmaxell thx - 明確情況下的吻 – Hannes 2010-10-19 14:03:21

+0

顏色[] =紅色和顏色[] =藍色和顏色[] =綠色變爲0 =紅色和1 =藍色和2 =綠色當我使用http_build_query - 我如何重建查詢字符串? (或者甚至在重建之前刪除一個值?) – RS7 2010-10-19 14:24:15