我有一个像这样的字符串:
梨和橙子很好吃。你更倾向哪个?梨还是橘子?
我需要在末尾替换“ 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] 删除。
我来说两句