如何使用str_replace或其他功能仅更改单词中的字符串一次?



我需要更改字符串中的一些单词 - 我必须在 2 个或更多单词上分隔字符串 - 或者在单词前后添加空格。例如,我有shopifystore - 这必须分为2个词":shopify和store,所以结果必须是:"shopify 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'));
但"狗店">

的归角是:"狗店"和"shopifystore"去:"shopify店"。谁能帮我重写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);
}
}
}

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

最新更新