英語では同じ単語でも複数形と単数形で異なります。
例えば、computerの複数形はcomputersとなります。
日本では複数でも同じ読み方をしますよね。
実は同じ読み方をする方が珍しいのです。
複数形と単数系の変換は、ルールがありますがイレギュラーな単語もあります。
s、esをつけるものもあれば、「man」と「men」のように特質な変化をするものもあるのです。
より詳しく知りたい方は、英語を勉強してください。
PHPでこれらの変換を行いたくライブラリを探したのですが、なかなかしっくりするものが見つかりませんでした。
そのため、自分で作成したのでコードを掲載します。
SingularByPlural.php というファイル名を作成して下記コードを記述。
$irregular_rules = array(
'men' => 'man',
'seamen' => 'seaman',
'snowmen' => 'snowman',
'women' => 'woman',
'people' => 'person',
'children' => 'child',
'sexes' => 'sex',
'moves' => 'move',
'databases' => 'database',
'feet' => 'foot',
'cruces' => 'crux',
'oases' => 'oasis',
'phenomena' => 'phenomenon',
'teeth' => 'tooth',
'geese' => 'goose',
'atlases' => 'atlas',
'corpuses' => 'corpus',
'genies' => 'genie',
'genera' => 'genus',
'graffiti' => 'graffito',
'loaves' => 'loaf',
'mythoi' => 'mythos',
'niches' => 'niche',
'numina' => 'numen',
'octopuses' => 'octopus',
'opuses' => 'opus',
'penises' => 'penis',
'equipment' => 'equipment',
'information' => 'information',
'rice' => 'rice',
'money' => 'money',
'species' => 'species',
'series' => 'series',
'fish' => 'fish',
'sheep' => 'sheep',
'swiss' => 'swiss',
);
$singular_rules = array(
'(quiz)zes$' => '$1',
'(matr)ices$' => '$1ix',
'(vert|ind)ices$' => '$1ex',
'^(ox)en' => '$1',
'(alias|status)es$' => '$1',
'(octop|vir)i$' => '$1us',
'(cris|ax|test)es$' => '$1is',
'(shoe)s$' => '$1',
'(o)es$' => '$1',
'(bus)es$' => '$1',
'([m|l])ice$' => '$1ouse',
'(x|ch|ss|sh)es$' => '$1',
'movies$' => 'movie',
'series$' => 'series',
'([^aeiouy]|qu)ies$' => '$1y',
'([lr])ves$' => '$1f',
'(tive)s$' => '$1',
'(hive)s$' => '$1',
'([^f])ves$' => '$1fe',
'(^analy)ses$' => '$1sis',
'(analy|ba|diagno|parenthe|progno|synop|the)ses$' => '$1sis',
'([ti])a$' => '$1um',
'(n)ews$' => '$1ews',
'(.)s$' => '$1',
);
function singularByPlural($plural) {
global $irregular_rules;
global $singular_rules;
$singular = $plural;
if (array_key_exists(strtolower($plural), $irregular_rules)) {
$singular = $irregular_rules[strtolower($plural)];
} else {
foreach($singular_rules as $key => $value) {
if (preg_match('/' . $key . '/', $plural)) {
$singular = preg_replace('/' . $key . '/', $value, $plural);
break;
}
}
}
return $singular;
}
このように使用します。
require_once "SingularByPlural.php";
$value = 'computers';
$singular_value = singularByPlural($value);
echo $singular_value;
出力値 : computer