使用php将字符串替换为基于第n次出现的单词

使用php将字符串替换为基于第n次出现的单词,php,arrays,string,Php,Arrays,String,我有一个带有锚定标记的字符串我过滤了该字符串并获得了所有锚定标记和值 我的阵列将是: Array ( [www.google.com] = Array ( [0]=> click here [1]=> search engine } [http://www.gmail.com] => Array ( [0] => text1 [1] => [2] =>

我有一个带有锚定标记的字符串我过滤了该字符串并获得了所有锚定标记和值

我的阵列将是:

Array 
(
  [www.google.com] = Array 
      (
        [0]=> click here
        [1]=> search engine
      }
  [http://www.gmail.com] => Array
    (
     [0] => text1
     [1] => 
     [2] => text2
     [3] => 
    )
)
现在我想根据事件替换链接。这里是0,1,2。。表示事件的发生 一串。如果我想替换第三次出现的gmail链接,我该怎么办


如何根据字符串的出现情况替换字符串?有人能帮我摆脱这一切吗

如果我理解这似乎是可行的:

foreach(array_keys($array_of_anchors) as $anchor_text) {
    if(count($array_of_anchors[$anchor_text]) > 2) {
        $array_of_anchors[$anchor_text][2] = //do replace   
    }
}

一个简单的循环来搜索每个锚点,查看是否有超过2次出现,然后对数组中的2个索引(第3次出现)执行任何操作。

您的问题不是很清楚,但是如果您只想替换字符串的第*x*次出现,您可以替换所有
x
出现,然后撤消
x-1
。假设
$target
是您的字符串,
$search
是您要查找的字符串,
$replace
是替换字符串,那么您可以尝试:

str_replace($search, $replace, $target, $x); 
str_replace($replace, $search, $target, ($x - 1));
但是,要小心,如果在
$target
中已经出现了
$replace
字符串,则会出现错误。为了真正安全,您应该首先检查
$replace
。这也适用于
preg\u replace

或者,您可以在循环中执行
preg_match
,计算匹配数并在字符串中向前移动偏移量。然后,当计数与您想要的匹配时,请执行
preg\u replace
以替换该计数


如果您使用的是HTML,那么最好尝试将其作为结构化文档进行解析,而不是使用搜索/替换

我找到了解决问题的方法,而不是使用偏移位置一次替换所有搜索词。最好按顺序依次更换,这样有助于解决问题

protected  function replaceLinkWithShortUrl($content,$toReplace,$search){
        $pos = strpos($content,$search);
        $replacedContent = substr_replace($content, $toReplace, $pos).substr($content, $pos+strlen($search));
        return $replacedContent;
    }
上面的代码将在内容中搜索一个单词,并替换为一个值,然后再次追加内容。重复此过程,直到用值替换所有搜索键


谢谢你们帮助我解决这个问题。谢谢你的SpaceDog..

看来你正在扫描一个完整的html页面,并通过
preg\u match\u all
等功能捕获锚定标记?更换是否必须始终是第三次?你来这里的目的是什么?对不起,我解释得不好。你正确地理解了我的问题。非常感谢。但是我需要根据发生率替换字符串,而不仅仅是最后一个字符串,并且没有其他具有相同$search word的字符串。如果其索引(发生率)值不匹配,则不会造成太大的干扰。OK。您是否可以共享用于获取初始数组的正则表达式,以及要将文本更改为什么的示例(如果每次都要更改替换项,可以使用几个)?您可以反复使用
preg\u replace
来替换每个事件,但如果没有更好的示例,我真的无法判断。