artan oto dizi dizi str_replace dize

4 Cevap php

what we can do to remove page=2& From:

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

hale:

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

page = 2, 2 durumunda, herhangi bir doğal sayıdır. yani (0-32000).

Selamlar,

4 Cevap

Sen parse_str sonucu yeniden http_build_query diziden bir dizi, unset sayfaya dizeyi ayrıştırmak, ve daha sonra kullanmak için kullanabilirsiniz.

Kod örneği:

$str = 'page=2&param1=value1&param2=value2';
$arr = array();
parse_str($str, $arr);
unset($arr['page']);
echo http_build_query($arr);
 $str = trim(preg_replace("/\bpage=\d+&?/", "", $str), "$");

Sıradanifade:

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

Dış çevresindeki süs herhangi sondaki & artık olabilir kaldıracaktır.

Bir şey kırpmak istiyorsanız [^&]+ & dışında herhangi bir karakter ile eşleştirmek için \d+ değiştirebilirsiniz.

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

patlayabilir kullanıyor?

$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);

Ben doğru anladım ise, bu (sürece numarasını bildiğiniz gibi) keyfi bir sayfayı kaldırmak izin verir:

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

Bir yan not olarak, düzenli ifadeler kullanarak bunlar önlenebilir eğer kod optimum yol değildir. Bunlar, yavaş ve bu str_replace veya mümkün olduğunda tokenizing gibi diğer yöntemler ile değiştirilmelidir. Ben bunu bir preg_replace daha hızlı koşmak gibi sorgu dizesinden kaldırmak için ne vardı sayfa bilseydim Şahsen benim yöntemi kullanmak istiyorum.