我正在尝试更换三个单词" 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);
答案 0 :(得分:0)
substr_replace返回其结果。所以你需要使用像这样的结构:
$result = substr_replace($sentenceBx1, $nounBx2, $nounPos2, $nounLength);
答案 1 :(得分:0)
$sentenceBx1 = substr_replace($sentenceBx1, $nounBx1, $nounPos1, $nounLength);
查看substr_replace
的规范,您可以看到substr_replace的描述是:
mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
这说明了很多事情。首先是它不会改变传递给它的任何变量。我们可以判断的原因是因为没有参数是passed by reference。您始终可以通过查看函数的规范来查询是否通过引用传递参数,并查找&符号(&
),如下所示:
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的规范, 如何你得到结果字符串?
返回值
返回结果字符串。如果string是一个数组,则返回数组。
所以,你想要做的是
...
$sentenceBx1 = substr_replace($sentenceBx1, $nounBx1, $nounPos1, $nounLength);
...
$sentenceBx1 = substr_replace($sentenceBx1, $nounBx2, $nounPos2, $nounLength);
...
$sentenceBx1 = substr_replace($sentenceBx1, $nounBx3, $nounPos3, $nounLength);