作ったコードをQiitaに書く様にしていきたいと思います。
単数系の英語を複数形に直すというコードを下記の条件で作成しました。
・末尾がs, sh, ch, o, x である場合英単語の末尾にesを付ける
・末尾がf, fe のいずれかである英単語の末尾の f, fe を除き、末尾に ves を付ける
・末尾の1文字がyで、末尾から2文字目がa, i, u, e, oのいずれでもない英単語の末尾の y を除き、末尾に ies を付ける
・上4つに当てはまらないものにはsを付ける
英語に多くある不規則変換は、それ用に辞書を作成し対応しています。
なので実際に使用する際はもっと多くの不規則変換を登録する必要があると思われます。
<?php
function SingularToPlural($in)
{
//不規則変換用の辞書
$dictionary = [
'child' => 'children',
'crux' => 'cruces',
'foot' => 'feet',
'knife' => 'knives',
'leaf' => 'leaves',
'louse' => 'lice',
'man' => 'men',
'medium' => 'media',
'mouse' => 'mice',
'oasis' => 'oases',
'person' => 'people',
'phenomenon' => 'phenomena',
'seaman' => 'seamen',
'snowman' => 'snowmen',
'tooth' => 'teeth',
'woman' => 'women',
];
//先に不規則変換をチェックしてから変換を行う
if (array_key_exists($in, $dictionary)) {
return $dictionary[$in];
} else {
$Singular = $in;
$Singular = preg_replace("/(s|sh|ch|o|x)$/", "$1es", $Singular);
$Singular = preg_replace("/(f|fe)$/", "ves", $Singular);
$Singular = preg_replace("/(a|i|u|e|o)y$/", "$1ys", $Singular);
$Singular = preg_replace("/y$/", "ies", $Singular);
if (!preg_match("/s$/", $Singular)) {
$Singular = $Singular . "s";
}
return $Singular;
}
}
//単語毎に改行してある入力を想定、それをループ処理で取得する
while ($line = fgets(STDIN)) {
$array[] = trim($line);
}
foreach ($array as $row) {
}
foreach ($array as $value) {
echo SingulartoPlural($value) . "\n";
}
?>