The Inflector Component
The Inflector component converts English words between their singular andplural forms.
Installation
- $ composer require symfony/inflector
Note
If you install this component outside of a Symfony application, you mustrequire the vendor/autoload.php
file in your code to enable the classautoloading mechanism provided by Composer. Readthis article for more details.
When you May Need an Inflector
In some scenarios such as code generation and code introspection, it's usuallyrequired to convert words from/to singular/plural. For example, if you need toknow which property is associated with an adder method, you must convert fromplural to singular (addStories()
method -> $story
property).
Although most human languages define simple pluralization rules, they alsodefine lots of exceptions. For example, the general rule in English is to add ans
at the end of the word (book
-> books
) but there are lots ofexceptions even for common words (woman
-> women
, life
-> lives
,news
-> news
, radius
-> radii
, etc.)
This component abstracts all those pluralization rules so you can convertfrom/to singular/plural with confidence. However, due to the complexity of thehuman languages, this component only provides support for the English language.
Usage
The Inflector component provides two static methods to convert from/tosingular/plural:
- use Symfony\Component\Inflector\Inflector;
- Inflector::singularize('alumni'); // 'alumnus'
- Inflector::singularize('knives'); // 'knife'
- Inflector::singularize('mice'); // 'mouse'
- Inflector::pluralize('grandchild'); // 'grandchildren'
- Inflector::pluralize('news'); // 'news'
- Inflector::pluralize('bacterium'); // 'bacteria'
Sometimes it's not possible to determine a unique singular/plural form for thegiven word. In those cases, the methods return an array with all the possibleforms:
- use Symfony\Component\Inflector\Inflector;
- Inflector::singularize('indices'); // ['index', 'indix', 'indice']
- Inflector::singularize('leaves'); // ['leaf', 'leave', 'leaff']
- Inflector::pluralize('matrix'); // ['matricies', 'matrixes']
- Inflector::pluralize('person'); // ['persons', 'people']