2010-01-14 45 views
0

我們能做些什麼,以除去頁= 2 & 來源:str_replace函數的字符串數組數量自動增加

"page=2&param1=value1&param2=value2" or 
"param1=value1&page=2&param2=value2". 

成爲:

"param1=value1&param2=value2" or 
"param1=value1&param2=value2". 

頁= 2的情況下,2任何自然沒有。即(0至32000)。

問候,

+0

use preg_replace – 2010-01-14 11:37:55

+0

'page = 2'是否也在字符串的末尾,即沒有後跟'&'? – 2010-01-14 11:46:11

回答

0

如果我理解正確的話,這將讓你刪除一個任意頁面(只要你知道電話號碼):

function replacePage($querystring, $page = 1) { 
    return str_replace('page='.$page.'&', '', $querystring); 
} 

作爲一個側面說明,使用正則表達式是如果可以避免,不是編碼的最佳方式。它們很慢,應該用其他方法替代,如str_replace或在可能的情況下進行標記。我個人會使用我的方法如果我知道我必須從查詢字符串中刪除哪個頁面,因爲它的運行速度比preg_replace快得多。

+0

好的,好主意,但我看不到結果?謝謝 – jones 2010-01-14 14:46:22

+0

你是否迴應數據?即'echo replacePage($ myQueryString,2)'。 – 2010-01-14 17:23:08

1
$str = trim(preg_replace("/\bpage=\d+&?/", "", $str), "$"); 

的正則表達式:

\b  # Match a "boundary" point (start of new word) 
page=  # Match 'page=' 
\d+  # Match 1 or more digits 
&?  # Match a '&' if it exists 

外繞裝飾將刪除任何尾隨&,可能是吃剩的。

如果您想修剪任何東西,您可以用[^&]+替換\d+以匹配除&以外的任何字符。

$str = trim(preg_replace("/\bpage=[^&]+&?/", "", $str), "$"); 
+0

這會在''param1 = value1&param2 = value2&page = 2'末尾留下'&'' – vava 2010-01-14 11:45:43

+0

@vava - 添加一個修剪來處理這種情況 – gnarf 2010-01-14 11:50:49

+0

如果訪問者手動輸入的頁面不是數?如何解析查詢字符串,明確地刪除有問題的密鑰,並重建它,但感謝您的輸入 – jones 2010-01-14 14:49:05

10

您可以使用parse_str來分析字符串到一個數組,從數組未設置頁面,然後用http_build_query重建的結果。

代碼示例:

$str = 'page=2&param1=value1&param2=value2'; 
$arr = array(); 
parse_str($str, $arr); 
unset($arr['page']); 
echo http_build_query($arr); 
+0

創建,取消設置和內爆對我來說似乎有點矯枉過正,但它看起來是一個很乾淨的地方比正則表達式。 – 2010-01-14 11:50:54

+0

感謝您馬克爲您輸入了迄今爲止,但如何使用http_build_query相關的我的問題,並用於pafination? – jones 2010-01-14 14:39:33

+0

我提供了一個代碼示例。 – 2010-01-14 14:58:25

0

使用爆炸?

$urlString = "page=2&param1=value1&param2=value2"; 
$arr = explode('&',$urlString); 
print_r($arr); 
foreach($arr as $var => $val) { 
    if(substr($val, 0, 6) == 'param2') { 
     unset($arr[ $var ]); 
    } 
} 
$urlString = implode('&',$arr); 
+0

你的代碼輸出:Array([0] => page = 2 [1] => param1 = value1 [2] => param2 = value2)看起來不像我的第一篇文章,但感謝您的輸入 – jones 2010-01-14 14:45:00