繁体   English   中英

如何使用str_replace或其他函数仅更改一次单词内的字符串?

[英]How to change string inside word only once using str_replace or other function?

我需要更改字符串中的一些单词-我必须将字符串分隔成2个或更多单词-或在单词前后添加空格。 例如,我有shopifystore-必须用2个字分开:“ shopify and store,所以结果必须是:” shopify store“。再有一个示例-我有dogsstore-这必须用2个字分开”:dogs and store,因此结果必须是:“狗商店”

因此,我编写了一些函数,但是效果不是很好。 我的功能:

function englishchange($string) {
$latin = array('dogs','dog','stores','store','shops','shop','shopify');
$latinchanged = array(' dogs ',' dog ',' stores ',' store ',' shops ',' shop ',' shopify ');
return str_replace($latin, $latinchanged, $string);
}
$englishchanged = (englishchange('shopifystore'));

但是,来自“ dogsstore”的重排是:“ dog's store”和“ shopifystore”将转到:“ shop ify store”。 任何人都可以帮我重写PHP代码以获得正确的结果吗?

您可以使用第二种形式的strtr进行替换。 在这种模式下,它将使用一系列替换对,并且从最长的字符串开始向下进行替换,它将不再替换该子字符串。 因此,您只需要使用array_combine$latin$latinchanged数组合并为一个数组,然后调用strtr

function englishchange($string) {
$latin = array('dogs','dog','stores','store','shops','shop','shopify');
$latinchanged = array(' dogs ',' dog ',' stores ',' store ',' shops ',' shop ',' shopify ');
return strtr($string, array_combine($latin, $latinchanged));
}
$englishchanged = (englishchange('dogsstore shopifystore'));
echo $englishchanged;

输出:

 dogs  store   shopify  store 

问题在于该字符串与多个搜索项匹配。 您可以假设每个字符串只希望更改一次,因此可以进行循环以避免该问题:

function englishchange($string)
{
    $latin = array('dogs','dog','stores','store','shops','shop','shopify');
    $latinchanged = array(' dogs ',' dog ',' stores ',' store ',' shops ',' shop ',' shopify ');
    foreach ($latin as $key => $item) {
        if (strpos($string, $item) !== false) {
            return str_replace($item, $latinchanged[$key], $string);
        }
    }
}

这样,更改后的字符串将在第一次替换后返回。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM