PHP - 使用 substr_replace 将出现的单词替换为字符串
PHP - using substr_replace to replace an occurrence of a word with a string
我正在尝试用三个不同字符串的内容替换三个出现的单词“NOUN”。我是 PHP 的新手,希望能指出正确的方向!
同样值得注意的是,我没有使用substr_replace,但据我所知,这是最好的方法吗?
下面是我一直在尝试的,当我回显 $sentenceBx1 的新内容时它没有产生任何变化:
$numAdjectSentence = substr_count($sentenceBx1, "ADJECTIVE");
$numVerbSentence = substr_count($sentenceBx1, "VERB");
$numNounSentence = substr_count($sentenceBx1, "NOUN");
substr_replace(string, replacement, start)
$nounPos1 = strpos($sentenceBx1, "NOUN");
substr_replace($sentenceBx1, $nounBx1, "test", $nounLength);
$nounPos2 = strpos($sentenceBx1, "NOUN");
substr_replace($sentenceBx1, $nounBx2, $nounPos2, $nounLength);
$nounPos3 = strpos($sentenceBx1, "NOUN");
substr_replace($sentenceBx1, $nounBx3, $nounPos3, $nounLength);
substr_replace returns 其结果。所以你需要使用这样的结构:
$result = substr_replace($sentenceBx1, $nounBx2, $nounPos2, $nounLength);
TL;DR
$sentenceBx1 = substr_replace($sentenceBx1, $nounBx1, $nounPos1, $nounLength);
说明
查看substr_replace
的说明,可以看到substr_replace的说明是:
mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
这说明了很多事情。首先是它不会更改传递给它的任何变量。我们之所以可以分辨是因为 none 个参数是 passed by reference。您始终可以通过查看函数的说明并查找 ampersand (&
) 来判断参数是否通过引用传递,如下所示:
string &$string
简而言之,当您将变量作为标准参数传递给函数时,您只传递了变量的副本,这意味着您调用的函数不能真正改变它的内容。 (实际上,它比这复杂一点,因为 PHP 只会在需要时复制值,如果不需要则在内部使用引用,但我想你现在不必担心。 ) 但是当你通过引用传递一个变量时,你传递的不是值的副本,而是对其内存位置的引用。所以当你调用的函数试图改变参数的内容时,它会跟随引用并改变你发送的原始变量的内容。
一个最小的例子如下:
$lorem = 'ipsum';
function foo($lorem) { $lorem = 'dolor'; echo $lorem, PHP_EOL; }
function bar(&$lorem) { $lorem = 'tenet'; echo $lorem, PHP_EOL; }
echo $lorem, PHP_EOL;
foo($lorem);
echo $lorem, PHP_EOL;
bar($lorem);
echo $lorem, PHP_EOL;
它将打印:
ipsum
dolor // (inside foo)
ipsum // after foo, your original variable remains unchanged
tenet // (inside bar)
tenet // after barm your original variable is updated
所以,回到 substr_replace 的规范,如何做 你如何得到 结果字符串?
Return Values
The result string is returned. If string is an array then array is returned.
所以,你想做
...
$sentenceBx1 = substr_replace($sentenceBx1, $nounBx1, $nounPos1, $nounLength);
...
$sentenceBx1 = substr_replace($sentenceBx1, $nounBx2, $nounPos2, $nounLength);
...
$sentenceBx1 = substr_replace($sentenceBx1, $nounBx3, $nounPos3, $nounLength);
我正在尝试用三个不同字符串的内容替换三个出现的单词“NOUN”。我是 PHP 的新手,希望能指出正确的方向!
同样值得注意的是,我没有使用substr_replace,但据我所知,这是最好的方法吗?
下面是我一直在尝试的,当我回显 $sentenceBx1 的新内容时它没有产生任何变化:
$numAdjectSentence = substr_count($sentenceBx1, "ADJECTIVE");
$numVerbSentence = substr_count($sentenceBx1, "VERB");
$numNounSentence = substr_count($sentenceBx1, "NOUN");
substr_replace(string, replacement, start)
$nounPos1 = strpos($sentenceBx1, "NOUN");
substr_replace($sentenceBx1, $nounBx1, "test", $nounLength);
$nounPos2 = strpos($sentenceBx1, "NOUN");
substr_replace($sentenceBx1, $nounBx2, $nounPos2, $nounLength);
$nounPos3 = strpos($sentenceBx1, "NOUN");
substr_replace($sentenceBx1, $nounBx3, $nounPos3, $nounLength);
substr_replace returns 其结果。所以你需要使用这样的结构:
$result = substr_replace($sentenceBx1, $nounBx2, $nounPos2, $nounLength);
TL;DR
$sentenceBx1 = substr_replace($sentenceBx1, $nounBx1, $nounPos1, $nounLength);
说明
查看substr_replace
的说明,可以看到substr_replace的说明是:
mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
这说明了很多事情。首先是它不会更改传递给它的任何变量。我们之所以可以分辨是因为 none 个参数是 passed by reference。您始终可以通过查看函数的说明并查找 ampersand (&
) 来判断参数是否通过引用传递,如下所示:
string &$string
简而言之,当您将变量作为标准参数传递给函数时,您只传递了变量的副本,这意味着您调用的函数不能真正改变它的内容。 (实际上,它比这复杂一点,因为 PHP 只会在需要时复制值,如果不需要则在内部使用引用,但我想你现在不必担心。 ) 但是当你通过引用传递一个变量时,你传递的不是值的副本,而是对其内存位置的引用。所以当你调用的函数试图改变参数的内容时,它会跟随引用并改变你发送的原始变量的内容。
一个最小的例子如下:
$lorem = 'ipsum';
function foo($lorem) { $lorem = 'dolor'; echo $lorem, PHP_EOL; }
function bar(&$lorem) { $lorem = 'tenet'; echo $lorem, PHP_EOL; }
echo $lorem, PHP_EOL;
foo($lorem);
echo $lorem, PHP_EOL;
bar($lorem);
echo $lorem, PHP_EOL;
它将打印:
ipsum
dolor // (inside foo)
ipsum // after foo, your original variable remains unchanged
tenet // (inside bar)
tenet // after barm your original variable is updated
所以,回到 substr_replace 的规范,如何做 你如何得到 结果字符串?
Return Values
The result string is returned. If string is an array then array is returned.
所以,你想做
...
$sentenceBx1 = substr_replace($sentenceBx1, $nounBx1, $nounPos1, $nounLength);
...
$sentenceBx1 = substr_replace($sentenceBx1, $nounBx2, $nounPos2, $nounLength);
...
$sentenceBx1 = substr_replace($sentenceBx1, $nounBx3, $nounPos3, $nounLength);