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

Php 使用str replace无法正确打印字符串,php,str-replace,Php,Str Replace,这是我的代码。我必须用星号替换空格,如果字符串中一行出现两个空格,则用一个破折号替换 <?php $string = "Keep your spacing perfect!"; $search = array(' ',' '); $search2 = array('*','-'); echo str_replace($search, $search2, $string); ?> 应该是什么 Keep*your--spacing-*perfect! 那么,我的代码出了

这是我的代码。我必须用星号替换空格,如果字符串中一行出现两个空格,则用一个破折号替换

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

Keep*your--spacing-*perfect!

那么,我的代码出了什么问题,我该如何修复它呢?我做了一些研究,但没有找到解决办法。感谢您的帮助

您只需交换您的替代品即可。因为您在替换双空格之前替换了单空格

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

答案如下:

如果
search
replace
是数组,则会从头到尾处理它们的元素

所以只需将数组值的顺序放在相反的顺序:

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

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