PHP - 使用substr_replace用字符串

时间:2017-11-02 19:06:17

标签: php str-replace

我正在尝试更换三个单词" 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);

2 个答案:

答案 0 :(得分:0)

substr_replace返回其结果。所以你需要使用像这样的结构:

$result = substr_replace($sentenceBx1, $nounBx2, $nounPos2, $nounLength);

答案 1 :(得分:0)

TL; DR

$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);