如何用 str_replace() 替换所有出现的两个子字符串?

How to replace all occurrences of two substrings with str_replace()?

目前我有这段代码可以用 <br /> 替换任何双 space。

它按预期工作:

<tr class="' . ($counter++ % 2 ? "odd" : "even") . '">
    <td>Garments:</td>
    <td>' . str_replace('  ', '<br /><br />', trim($result['garment_type'] ) ) . '</td>
</tr>

但是我想在同一行上再做一个 str_replace() 来用竖线字符 |.

替换任何单个 space

我尝试复制代码,但这只会为我创建另一个 TD

如有任何帮助,我们将不胜感激。

您可以将数组传递给 str_replace

$what[0] = '  ';
$what[1] = ' ';

$with[0] = '<br /><br />';
$with[1] = '|';

str_replace($what, $with, trim($result['garment_type'] ) )

数组的顺序很重要,否则你会得到 <br|/> 而不是 <br /> 所以试试:

str_replace(array(' ','||'), array('|','<br /><br />'), trim($result['garment_type'] ));

像这样:

echo str_replace(array(' ','||'), array('|','<br /><br />'), 'crunchy  bugs are so   tasty man');

给你:

crunchy<br /><br />bugs|are|so<br /><br />|tasty|man

基本上,您首先将每个 space 更改为 |,然后将任何两个相邻的 (||) 更改为 <br /><br />

如果你走另一条路,你会将两个 space 更改为 <br /><br /> 然后你将单个 space 更改为 | 并且在 <br /> 有一个 space,所以你最终得到 <br|/>

使用您的代码进行编辑:

'<tr class="' . ($counter++ % 2 ? "odd" : "even") . '">
    <td>Garments:</td>
    <td>' . str_replace(array(' ','||'), array('|','<br /><br />'), trim($result['garment_type'] )) . '</td>
</tr>'

要解决 str_replace 的问题(<br /> 中的 space 被替换为 |)尝试 strtr:

echo strtr(trim($result['garment_type']), array(' '=>'|', '  '=>'<br /><br />'));