【问题标题】:str_replace string in array number auto increasingstr_replace 数组编号中的字符串自动增加
【发布时间】:2010-01-14 11:31:37
【问题描述】:

我们可以做些什么来删除 page=2& 来自:

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

变成:

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

在page=2的情况下,2是任何自然数。即(0 到 32000)。

问候,

【问题讨论】:

  • page=2 是否也可以在字符串的末尾,即后面没有&

标签: php string arrays str-replace


【解决方案1】:

您可以使用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);

【讨论】:

  • 创建、取消设置和内爆对我来说似乎有点矫枉过正,但它看起来比正则表达式干净得多。
  • 感谢 Mark 到目前为止的输入,但是如何使用与我的问题相关的 http_build_query,并用于 pafination?
【解决方案2】:
 $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), "$");

【讨论】:

  • 这会将& 留在"param1=value1&param2=value2&page=2" 的末尾
  • @vava - 添加了一个修剪来处理这种情况
  • 如果访问者手动输入的页面不是数字怎么办?如果如何解析查询字符串,显式删除有问题的键,然后重建它,但感谢您的输入
【解决方案3】:

使用爆炸?

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

【讨论】:

  • 您的代码输出:Array ( [0] => page=2 [1] => param1=value1 [2] => param2=value2 ) 这看起来不像我的第一次发帖,但是感谢您的意见
【解决方案4】:

如果我理解正确,这将允许您删除任意页面(只要您知道数字):

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

附带说明,如果可以避免,使用正则表达式并不是最佳的编码方式。它们很慢,应该用其他方法代替,例如str_replace 或尽可能标记化。如果我知道我必须从查询字符串中删除哪个页面,我个人会使用我的方法,因为它的运行速度比 preg_replace 快得多。

【讨论】:

  • 您是否回显了数据?即echo replacePage($myQueryString, 2).
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-28
  • 2021-03-05
  • 2012-11-06
  • 1970-01-01
  • 2013-04-11
  • 2021-12-29
  • 2013-07-11
相关资源
最近更新 更多