PHP为什么我在str_replace中的第四个参数不起作用?

时间:2018-06-12 14:16:01

标签: php string replace

我是PHP的初学者,我无法理解为什么这不起作用。

<?php
$count = 1;
$body = 'Biceps, Triceps, Quadriceps, Chest, Calves, Forearms are great to train!';
$body = str_replace('Chest', 'Quadriceps', $body);
$body = str_replace('Calves', 'Triceps', $body);
$body = str_replace('Forearms', 'Biceps', $body);
$body = str_replace('Biceps', 'Forearms', $body, $count);
$body = str_replace('Triceps', 'Calves', $body, $count);
$body = str_replace('Quadriceps', 'Chest', $body, $count);
echo $body;
?>

对于后三个替换,虽然第四个参数(可以定义替换次数)设置为1,但它们仍然执行两次替换,最后我得到了这个输出:

  

'前臂,犊牛,胸部,胸部,犊牛,前臂非常适合训练!'

而不是:

  

'前臂,犊牛,胸部,股四头肌,肱三头肌,二头肌很适合训练!'

...为什么?!

3 个答案:

答案 0 :(得分:3)

the manual说的是:

  

如果通过,则将设置为执行的替换次数。

此外,函数签名使用&符号表示函数写入您传递给它的变量:

  

mixed str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] )

简而言之,这是一份报告,而不是一种设定。

答案 1 :(得分:2)

每次替换都在下一次执行之前发生。

  • 在第三次更换中,您需要更换&#34; Forearms&#34;到&#34; Biceps。&#34;
  • 在第四次更换时,您在更换时将其更改回来 &#34;二头肌&#34; to&#34; Forearms。&#34;

第二和第四次替换的类似问题。 &#34; 1&#34;你传递给str_replace并没有做任何事情。

如果您只想要替换第一个实例,请考虑使用preg_replace

答案 2 :(得分:0)

第四个参数(来自manual)......

  

<强>计数

     

如果通过,则将设置为执行的替换次数。

所以不是要做的金额,而是金额。

作为替代方案,请尝试......

$body1 = strtr($body, 
    ['Chest'=>'Quadriceps','Calves' => 'Triceps', 
        'Forearms' => 'Biceps', 'Biceps' => 'Forearms',
        'Triceps' => 'Calves', 'Quadriceps' => 'Chest'
    ] );

哪个输出

Forearms, Calves, Chest, Quadriceps, Triceps, Biceps are great to train!