PHP使用偏移量和长度来替换多个字符串

约翰

我有一个像这样的字符串:

梨和橙子很好吃。你更倾向哪个?梨还是橘子?

我需要在末尾替换“ Pear”和“ Orange”字符串,并将它们包装在链接中。我有以下JSON格式的信息:

"string": "The Pear and Orange are tasty. Which one do you prefer? Pear or Orange?",
"links": {
"55": [
   {
      "url": "http://example.com/pear",
      "name": "Pear",
      "offset": 55,
      "length": 4
   }
],
"63": [
   {
      "url": "http://example.com/orange",
      "name": "Orange",
      "offset": 63,
      "length": 6
   }
]

我想使用偏移量和长度来替换字符串,而不是依赖名称,因为主字符串可能包含单词的多次出现。

我尝试过的

1)我尝试使用foreach循环遍历JSON中的链接并使用substr_replace替换它们,但是在第一个循环之后,偏移量不准确,因为我已经用链接替换了第一个字符串,这增加了长度原始字符串的20-30个字符。

2)然后,我尝试将替换,偏移和长度数组传递给substr_replace,以尝试一次替换所有字符串,但是由于原始字符串不是数组格式,所以它不起作用,它只是一个普通字符串。

有人对我有什么想法或建议吗?当我拔出头发时,任何帮助将不胜感激。看起来很简单,但我还不太明白!

非常感谢,

约翰

尼科

您的第一个直觉是正确的。您需要做的唯一更改是使for循环从最后一个条目开始,然后向后循环,而不是相反。这将起作用,因为仅当您更改字符串中该单词之前的内容时,单词的偏移量才会更改

for($i = count($links)-1; $i >= 0; $i--) {
    str_replace( ... );
}

上面的方法要求根据链接的偏移量对链接进行排序,但是,偏移量最高的是数组中的最后一个。如果未对链接进行排序,则必须首先执行该操作。但是,如果您需要对数组进行排序,则最好对它们进行排序,以使最高偏移量排在最前面,然后以正常方式遍历数组。

例如:

$links = array(
    array( 'name' => 'Pear', 'offset' => 55 ),
    array( 'name' => 'Orange', 'offset' => 63 ),
    array( 'name' => 'LAST', 'offset' => 0 ),
    array( 'name' => 'MIDDLE', 'offset' => 60 ),
    array( 'name' => 'FIRST', 'offset' => 1000)
);

function mySort($a, $b) {
    return $b['offset'] - $a['offset']; // Sorts elements with higher offset first
}

usort($links, 'mySort');

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用sed来查找和替换具有多个字符串的模式?

PHP多个字符串替换

根据两个字符串的偏移量删除一段文本

如何使用PowerShell替换多个字符串

非法的字符串偏移量警告PHP

PHP中的非法字符串偏移量错误

非法字符串偏移量'名称'laravel PHP

PHP-数组-非法的字符串偏移量

如何使用UTC偏移量转换字符串

VIM-如何使用领导者搜索和替换多个字符串?

使用Visual Studio IDE搜索多个字符串查找和替换

如何使用str_replace替换PHP中的多个字符串?

使用偏移量将字符串日期转换为DateTimePST(String)和DateTimeLocal(String)?

如何找到另一个字符串的字符串片段的起始偏移量?

为什么我的反汇编C ++代码使用指令指针和偏移量来获取字符串文字?

用其他多个字符串替换多个字符串

如何通过Javascript获取句子中选定的字符串偏移量开始和偏移量结束

带有 float 和 int 字符串的非法字符串偏移量

替换多个文件中的多个字符串

如何计算多个字符串的长度

非法的字符串偏移量'name'php-多个数组成1个数组

使用powershell和regex查找和替换文本文件中的多个字符串

如何替换字符串中的多个字符?

在 Python 中替换字符串的多个字符

Kotlin替换字符串中的多个字符

替换字符串中的多个字符

用多个字符替换字符串

替换字符串中的多个字符

用字符串中的多个字符替换多个字符