| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224 | <?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];        }        // -----------------------------------------------------        // Are the singular and plural forms the same?        // -----------------------------------------------------        if (in_array(Str::lower($value), static::$uncountable))        {        	return static::$plural_cache[$value] = $value;        }        // -----------------------------------------------------        // Is the plural form irregular?        // -----------------------------------------------------        foreach (static::$irregular as $pattern => $irregular)        {            $pattern = '/'.$pattern.'$/i';            if (preg_match($pattern, $value))            {        		return static::$plural_cache[$value] = preg_replace($pattern, $irregular, $value);            }        }        // -----------------------------------------------------        // Check the plural forms for matches.        // -----------------------------------------------------        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];        }		// -----------------------------------------------------		// Are the singular and plural forms the same?		// -----------------------------------------------------        if (in_array(Str::lower($value), static::$uncountable))        {        	return static::$singular_cache[$value] = $value;        }		// -----------------------------------------------------		// Is the plural form irregular?		// -----------------------------------------------------        foreach (static::$irregular as $irregular => $pattern)        {            $pattern = '/'.$pattern.'$/i';            if (preg_match($pattern, $value))            {				return static::$singular_cache[$value] = preg_replace($pattern, $irregular, $value);            }        }		// -----------------------------------------------------		// Check the singular forms for matches.		// -----------------------------------------------------        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;	}}
 |