![](/img/trans.png)
[英]How to replace string with another string and keep case in php and mysql?
[英]How to change a string's case based on another string?
我正在研究一個“你是說…… ”有點類似於谷歌的系統! 拼寫器部分很簡單(使用 PHP 的 pspell 庫),但我無法解決的是大小寫問題。
假設拼錯的詞是“GoVeNMeNt”,那么正確的詞應該是“GoVerNMeNt”(類似於谷歌),但pspell 庫僅在一種情況下(通常是小寫)給出建議。
那么我如何編寫一個函數transformCase
來接收實際字符串( $string
)和建議字符串( $subject
)? 我編寫了以下無法處理所有情況的實現:
function transformCase($string,$subject){
for ($i=0,$marker=0;$i<strlen($string);++$i)
if (strcasecmp($string[$i],$subject[$marker])==0){
$subject[$marker]=$string[$i];
$marker+=1;
}
elseif (strlen($string)==strlen($subject))
$marker+=1;
return $subject;
}
echo transformCase("AbSaNcE",'absence')."\n"; # AbSeNcE :)
echo transformCase("StRioNG",'string')."\n"; # StRiNG :)
echo transformCase("GOVERMENt",'government')."\n"; # GOVERNment :<
在最后一種情況下,輸出應該是 GOVERnMENT。 該算法也不適用於各種其他查詢。
所以如果有人幫助我解決算法,我會很高興:)
嘗試對算法進行下一個修改:
function transformCase($string,$subject) {
for ($i=0,$marker=0;$i<strlen($string);++$i) {
if (strcasecmp($string[$i],$subject[$marker])==0) {
$subject[$marker]=$string[$i];
$marker+=1;
}
// Look for the next same character in $string
while (strcasecmp($string[$i],$subject[$marker])!=0) {
$i+=1;
}
}
return $subject;
}
比較elseif (strlen($string)==strlen($subject))
不保證該函數按您的需要工作。 否則,您可以引入額外的修改以獲得最佳性能。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.