使用 str replace 无法正确打印字符串

string doesnt print out correctly using str replace

这是我的代码。我必须用星号替换 space,如果字符串中连续出现两个 space,则将其替换为一个破折号

<?php
$string = "Keep your    spacing   perfect!";
$search = array(' ','  ');
$search2 = array('*','-');
echo str_replace($search, $search2, $string);
?> 

当我 运行 它打印出来

Keep*your****spacing***perfect!

应该是

Keep*your--spacing-*perfect!

我的代码有什么问题,我该如何解决?我做了一些研究,但无法找到解决方案。感谢您的帮助!

你只需要交换你的替换。因为你替换单 space before 替换双 spaces.

$string = "Keep your    spacing   perfect!";
$search = array('  ',' '); // swap !
$search2 = array('-','*'); // swap !
echo str_replace($search, $search2, $string);

输出:

Keep*your--spacing-*perfect!

试试这个:

<?php
$string = "Keep your    spacing   perfect!";
$string1 = preg_replace("/\s\s/", "-", $string);
$string2 = preg_replace("/\s/", '*', $string1);
echo $string2;
?>

输出如下:

Keep*your--spacing-*perfect!

答案是PHP manual entry for str_replace中的这一行:

If search or replace are arrays, their elements are processed first to last.

因此只需将数组值的顺序倒过来即可:

<?php
$string = "Keep your    spacing   perfect!";
$search = array('  ',' ');
$search2 = array('-','*');
echo str_replace($search, $search2, $string);