0

我有一个带有锚标签的字符串,我过滤了字符串并获得了所有锚标签和值。

我的数组将是:

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 .. 代表字符串的出现。如果我想替换第 3 次出现的 gmail 链接,我应该怎么做。

如何根据字符串的出现替换字符串?谁能帮我解决这个问题?

4

3 回答 3

0

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

str_replace($search, $replace, $target, $x); 
str_replace($replace, $search, $target, ($x - 1));

但是,要小心,如果$replace字符串已经出现在$target. 为了真正安全,您应该$replace首先检查。这也适用于preg_replace.

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

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

于 2013-09-22T05:37:36.417 回答
0

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

protected  function replaceLinkWithShortUrl($content,$toReplace,$search){
        $pos = strpos($content,$search);
        $replacedContent = substr_replace($content, $toReplace, $pos).substr($content, $pos+strlen($search));
        return $replacedContent;
    }

上面的代码将在内容中搜索一个单词并用一个值替换并再次附加内容。此过程将重复,直到用值替换所有搜索键。

感谢那些帮助我解决问题的人。谢谢太空狗。。

于 2013-09-23T05:39:52.093 回答
0

如果我理解,这似乎可行:

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 次出现)执行任何操作。

于 2013-09-22T03:45:50.733 回答