問題を解決するのに非常に近いですが、文字列を囲む空白を削除する方法を理解できません。たとえば、' ! '
,'! '
、および' !'
は'!'
になります。これは?キャラクター、 。文字およびその他の句読点文字。文字列の置換PHP
ここまでは私のコードです。それは文字を取って、私がやったナトの言葉に変換するはずですが、私の句読点は間違っています。例:' ! awesome. .! '
は' ! Alfa Whiskey Echo Sierra Oscar Mike Echo . . !'
になります。句読点の間に空白を入れたくない場合です。
function to_nato($words){
$key = array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z");
$translationKey = array("Alfa", "Bravo", "Charlie", "Delta", "Echo", "Foxtrot", "Golf", "Hotel", "India", "Juliet", "Kilo", "Lima", "Mike", "November", "Oscar", "Papa", "Quebec", "Romeo", "Sierra", "Tango", "Uniform", "Victor", "Whiskey", "Xray", "Yankee", "Zulu");
$strToRet = "";
for($i = 0; $i < strlen($words); $i++) {
$letter = substr($words, $i, 1);
if(ctype_alpha($letter)) {
for($keySearch = 0; $keySearch < count($key); $keySearch++) {
$letterToSearch = array_search($key[$keySearch], $key);
if(strcasecmp($letter, $key[$letterToSearch]) == 0) {
$natoLetter = $translationKey[$letterToSearch];
$strToRet .= $natoLetter;
}
}
}
else {
$strToRet .= $letter;
}
}
$strToRet = preg_replace('/([a-z])([A-Z])/s','$1 $2', $strToRet);
//$strToRet = str_replace(" ! ", "!", $strToRet, $count);
return $strToRet;
}
問題に関連していないが、あなたは文字のマッピングを見つけるために、2つの配列の代わりに連想配列を使用する必要があります。 – Barmar
あなたの機能を試しましたが、句読点の前に余分なスペースがありません。句読点の周りの唯一のスペースは、元の文字列にあったものです。 – Barmar
私は ''!Alfa Whisky Echo Sierra Oscar Mike Echo。! "を返します。 – Barmar