| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206 | 
							- <?php namespace System;
 
- class Inflector {
 
- 	/**
 
- 	 * The words that have been converted to singular.
 
- 	 *
 
- 	 * @var array
 
- 	 */
 
- 	private static $singular_cache = array();
 
- 	/**
 
- 	 * The words that have been converted to plural.
 
- 	 *
 
- 	 * @var array
 
- 	 */
 
- 	private static $plural_cache = array();
 
- 	/**
 
- 	 * Plural word forms.
 
- 	 *
 
- 	 * @var array
 
- 	 */
 
- 	private static $plural = array(
 
- 		'/(quiz)$/i' => "$1zes",
 
- 		'/^(ox)$/i' => "$1en",
 
- 		'/([m|l])ouse$/i' => "$1ice",
 
- 		'/(matr|vert|ind)ix|ex$/i' => "$1ices",
 
- 		'/(x|ch|ss|sh)$/i' => "$1es",
 
- 		'/([^aeiouy]|qu)y$/i' => "$1ies",
 
- 		'/(hive)$/i' => "$1s",
 
- 		'/(?:([^f])fe|([lr])f)$/i' => "$1$2ves",
 
- 		'/(shea|lea|loa|thie)f$/i' => "$1ves",
 
- 		'/sis$/i' => "ses",
 
- 		'/([ti])um$/i' => "$1a",
 
- 		'/(tomat|potat|ech|her|vet)o$/i' => "$1oes",
 
- 		'/(bu)s$/i' => "$1ses",
 
- 		'/(alias)$/i' => "$1es",
 
- 		'/(octop)us$/i' => "$1i",
 
- 		'/(ax|test)is$/i' => "$1es",
 
- 		'/(us)$/i' => "$1es",
 
- 		'/s$/i' => "s",
 
- 		'/$/' => "s"
 
- 	);
 
- 	/**
 
- 	 * Singular word forms.
 
- 	 *
 
- 	 * @var array
 
- 	 */
 
- 	private static $singular = array(
 
- 		'/(quiz)zes$/i' => "$1",
 
- 		'/(matr)ices$/i' => "$1ix",
 
- 		'/(vert|ind)ices$/i' => "$1ex",
 
- 		'/^(ox)en$/i' => "$1",
 
- 		'/(alias)es$/i' => "$1",
 
- 		'/(octop|vir)i$/i' => "$1us",
 
- 		'/(cris|ax|test)es$/i' => "$1is",
 
- 		'/(shoe)s$/i' => "$1",
 
- 		'/(o)es$/i' => "$1",
 
- 		'/(bus)es$/i' => "$1",
 
- 		'/([m|l])ice$/i' => "$1ouse",
 
- 		'/(x|ch|ss|sh)es$/i' => "$1",
 
- 		'/(m)ovies$/i' => "$1ovie",
 
- 		'/(s)eries$/i' => "$1eries",
 
- 		'/([^aeiouy]|qu)ies$/i' => "$1y",
 
- 		'/([lr])ves$/i' => "$1f",
 
- 		'/(tive)s$/i' => "$1",
 
- 		'/(hive)s$/i' => "$1",
 
- 		'/(li|wi|kni)ves$/i' => "$1fe",
 
- 		'/(shea|loa|lea|thie)ves$/i' => "$1f",
 
- 		'/(^analy)ses$/i' => "$1sis",
 
- 		'/((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$/i' => "$1$2sis",
 
- 		'/([ti])a$/i' => "$1um",
 
- 		'/(n)ews$/i' => "$1ews",
 
- 		'/(h|bl)ouses$/i' => "$1ouse",
 
- 		'/(corpse)s$/i' => "$1",
 
- 		'/(us)es$/i' => "$1",
 
- 		'/(us|ss)$/i' => "$1",
 
- 		'/s$/i' => "",
 
- 	);
 
- 	/**
 
- 	 * Irregular word forms.
 
- 	 *
 
- 	 * @var array
 
- 	 */
 
- 	private static $irregular = array(
 
- 		'move' => 'moves',
 
- 		'foot' => 'feet',
 
- 		'goose' => 'geese',
 
- 		'sex' => 'sexes',
 
- 		'child' => 'children',
 
- 		'man' => 'men',
 
- 		'tooth' => 'teeth',
 
- 		'person' => 'people',
 
- 	);
 
- 	/**
 
- 	 * Uncountable word forms.
 
- 	 *
 
- 	 * @var array
 
- 	 */
 
- 	private static $uncountable = array(
 
- 		'sheep',
 
- 		'fish',
 
- 		'deer',
 
- 		'series',
 
- 		'species',
 
- 		'money',
 
- 		'rice',
 
- 		'information',
 
- 		'equipment',
 
- 	);
 
- 	/**
 
- 	 * Convert a word to its plural form.
 
- 	 *
 
- 	 * @param  string  $value
 
- 	 * @return string
 
- 	 */
 
- 	public static function plural($value)
 
- 	{
 
- 		if (array_key_exists($value, static::$plural_cache))
 
- 		{
 
- 			return static::$plural_cache[$value];
 
- 		}
 
- 		
 
- 		if (in_array(strtolower($value), static::$uncountable))
 
- 		{
 
- 			return static::$plural_cache[$value] = $value;
 
- 		}
 
- 		foreach (static::$irregular as $pattern => $irregular)
 
- 		{
 
- 			$pattern = '/'.$pattern.'$/i';
 
- 			if (preg_match($pattern, $value))
 
- 			{
 
- 				return static::$plural_cache[$value] = preg_replace($pattern, $irregular, $value);
 
- 			}
 
- 		}
 
- 		foreach (static::$plural as $pattern => $plural)
 
- 		{
 
- 			if (preg_match($pattern, $value))
 
- 			{
 
- 				return static::$plural_cache[$value] = preg_replace($pattern, $plural, $value);
 
- 			}
 
- 		}
 
- 		return static::$plural_cache[$value] = $value;
 
- 	}
 
- 	/**
 
- 	 * Convert a word to its singular form.
 
- 	 *
 
- 	 * @param  string  $value
 
- 	 * @return string
 
- 	 */
 
- 	public static function singular($value)
 
- 	{
 
- 		if (array_key_exists($value, static::$singular_cache))
 
- 		{
 
- 			return static::$singular_cache[$value];
 
- 		}
 
- 		if (in_array(strtolower($value), static::$uncountable))
 
- 		{
 
- 			return static::$singular_cache[$value] = $value;
 
- 		}
 
- 		foreach (static::$irregular as $irregular => $pattern)
 
- 		{
 
- 			$pattern = '/'.$pattern.'$/i';
 
- 			if (preg_match($pattern, $value))
 
- 			{
 
- 				return static::$singular_cache[$value] = preg_replace($pattern, $irregular, $value);
 
- 			}
 
- 		}
 
- 		foreach (static::$singular as $pattern => $singular)
 
- 		{
 
- 			if (preg_match($pattern, $value))
 
- 			{
 
- 				return static::$singular_cache[$value] = preg_replace($pattern, $singular, $value);
 
- 			}
 
- 		}
 
- 		return static::$singular_cache[$value] = $value;
 
- 	}
 
- 	/**
 
- 	 * Get the plural form of a word if the count is greater than zero.
 
- 	 *
 
- 	 * @param  string  $value
 
- 	 * @param  int	 $count
 
- 	 * @return string
 
- 	 */
 
- 	public static function plural_if($value, $count)
 
- 	{
 
- 		return ($count > 1) ? static::plural($value) : $value;
 
- 	}
 
- }
 
 
  |