我需要更改字符串中的某些单词-我必须将字符串分隔成2个或更多单词-或在单词前后添加空格。例如,我有shopifystore-必须用2个字分开:“ shopify and store,所以结果必须是:” shopify store“。再有一个示例-我有dogsstore-这必须用2个字分开”:dogs and store,因此结果必须是:“狗店”
所以,我写了一些函数,但是效果不是很好。我的功能:
void OnItemSelected(object sender, SelectedItemChangedEventArgs e)
{
var item = e.SelectedItem as MasterPageItem;
if (item != null)
{
Detail = new NavigationPage((Page)Activator.CreateInstance(item.TargetType));
item.IsVisible = false; //this would make the clicked item invisible
masterPage.listView.SelectedItem = null;
IsPresented = false;
}
}
但是,来自“ dogsstore”的重排是:“ dog s store”和“ shopifystore”将转到:“ shop ify store”。有人可以帮我重写php代码以获得正确的结果吗?
答案 0 :(得分:2)
您可以使用第二种形式的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
答案 1 :(得分:1)
问题在于字符串与多个搜索项匹配。 您可以假设每个字符串只希望更改一次,因此可以进行循环以避免该问题:
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);
}
}
}
这样,更改后的字符串将在第一次替换后返回。