Modules

Kohana_Inflector

Inflector helper class. Inflection is changing the form of a word based on the context it is used in. For example, changing a word into a plural form.

Inflection is only tested with English, and is will not work with other languages.

package
Kohana
category
Helpers
author
Kohana Team
copyright
© 2007-2012 Kohana Team
license
http://kohanaframework.org/license

Class declared in SYSPATH/classes/kohana/inflector.php on line 14.

Properties

protected static array $cache

cached inflections

array(0) 

protected static array $irregular

irregular words

NULL

protected static array $uncountable

uncountable words

NULL

Methods

public static camelize( string $str ) (defined in Kohana_Inflector)

Makes a phrase camel case. Spaces and underscores will be removed.

$str = Inflector::camelize('mother cat');     // "motherCat"
$str = Inflector::camelize('kittens in bed'); // "kittensInBed"

Parameters

  • string $str required - Phrase to camelize

Return Values

  • string

Source Code

public static function camelize($str)
{
	$str = 'x'.strtolower(trim($str));
	$str = ucwords(preg_replace('/[\s_]+/', ' ', $str));

	return substr(str_replace(' ', '', $str), 1);
}

public static decamelize( string $str [, string $sep = string(1) " " ] ) (defined in Kohana_Inflector)

Converts a camel case phrase into a spaced phrase.

$str = Inflector::decamelize('houseCat');    // "house cat"
$str = Inflector::decamelize('kingAllyCat'); // "king ally cat"

Parameters

  • string $str required - Phrase to camelize
  • string $sep = string(1) " " - Word separator

Return Values

  • string

Source Code

public static function decamelize($str, $sep = ' ')
{
	return strtolower(preg_replace('/([a-z])([A-Z])/', '$1'.$sep.'$2', trim($str)));
}

public static humanize( string $str ) (defined in Kohana_Inflector)

Makes an underscored or dashed phrase human-readable.

$str = Inflector::humanize('kittens-are-cats'); // "kittens are cats"
$str = Inflector::humanize('dogs_as_well');     // "dogs as well"

Parameters

  • string $str required - Phrase to make human-readable

Return Values

  • string

Source Code

public static function humanize($str)
{
	return preg_replace('/[_-]+/', ' ', trim($str));
}

public static plural( string $str [, integer $count = NULL ] ) (defined in Kohana_Inflector)

Makes a singular word plural.

echo Inflector::plural('fish'); // "fish", uncountable
echo Inflector::plural('cat');  // "cats"

You can also provide the count to make inflection more intelligent. In this case, it will only return the plural value if the count is not one.

echo Inflector::singular('cats', 3); // "cats"

Special inflections are defined in config/inflector.php.

Parameters

  • string $str required - Word to pluralize
  • integer $count = NULL - Count of thing

Tags

Return Values

  • string

Source Code

public static function plural($str, $count = NULL)
{
	// $count should always be a float
	$count = ($count === NULL) ? 0.0 : (float) $count;

	// Do nothing with singular
	if ($count == 1)
		return $str;

	// Remove garbage
	$str = trim($str);

	// Cache key name
	$key = 'plural_'.$str.$count;

	// Check uppercase
	$is_uppercase = ctype_upper($str);

	if (isset(Inflector::$cache[$key]))
		return Inflector::$cache[$key];

	if (Inflector::uncountable($str))
		return Inflector::$cache[$key] = $str;

	if (empty(Inflector::$irregular))
	{
		// Cache irregular words
		Inflector::$irregular = Kohana::config('inflector')->irregular;
	}

	if (isset(Inflector::$irregular[$str]))
	{
		$str = Inflector::$irregular[$str];
	}
	elseif (preg_match('/[sxz]$/', $str) OR preg_match('/[^aeioudgkprt]h$/', $str))
	{
		$str .= 'es';
	}
	elseif (preg_match('/[^aeiou]y$/', $str))
	{
		// Change "y" to "ies"
		$str = substr_replace($str, 'ies', -1);
	}
	else
	{
		$str .= 's';
	}

	// Convert to uppsecase if nessasary
	if ($is_uppercase)
	{
		$str = strtoupper($str);
	}

	// Set the cache and return
	return Inflector::$cache[$key] = $str;
}

public static singular( string $str [, integer $count = NULL ] ) (defined in Kohana_Inflector)

Makes a plural word singular.

echo Inflector::singular('cats'); // "cat"
echo Inflector::singular('fish'); // "fish", uncountable

You can also provide the count to make inflection more intelligent. In this case, it will only return the singular value if the count is greater than one and not zero.

echo Inflector::singular('cats', 2); // "cats"

Special inflections are defined in config/inflector.php.

Parameters

  • string $str required - Word to singularize
  • integer $count = NULL - Count of thing

Tags

Return Values

  • string

Source Code

public static function singular($str, $count = NULL)
{
	// $count should always be a float
	$count = ($count === NULL) ? 1.0 : (float) $count;

	// Do nothing when $count is not 1
	if ($count != 1)
		return $str;

	// Remove garbage
	$str = strtolower(trim($str));

	// Cache key name
	$key = 'singular_'.$str.$count;

	if (isset(Inflector::$cache[$key]))
		return Inflector::$cache[$key];

	if (Inflector::uncountable($str))
		return Inflector::$cache[$key] = $str;

	if (empty(Inflector::$irregular))
	{
		// Cache irregular words
		Inflector::$irregular = Kohana::config('inflector')->irregular;
	}

	if ($irregular = array_search($str, Inflector::$irregular))
	{
		$str = $irregular;
	}
	elseif (preg_match('/us$/', $str))
	{
		// http://en.wikipedia.org/wiki/Plural_form_of_words_ending_in_-us
		// Already singular, do nothing
	}
	elseif (preg_match('/[sxz]es$/', $str) OR preg_match('/[^aeioudgkprt]hes$/', $str))
	{
		// Remove "es"
		$str = substr($str, 0, -2);
	}
	elseif (preg_match('/[^aeiou]ies$/', $str))
	{
		// Replace "ies" with "y"
		$str = substr($str, 0, -3).'y';
	}
	elseif (substr($str, -1) === 's' AND substr($str, -2) !== 'ss')
	{
		// Remove singular "s"
		$str = substr($str, 0, -1);
	}

	return Inflector::$cache[$key] = $str;
}

public static uncountable( string $str ) (defined in Kohana_Inflector)

Checks if a word is defined as uncountable. An uncountable word has a single form. For instance, one "fish" and many "fish", not "fishes".

Inflector::uncountable('fish'); // TRUE
Inflector::uncountable('cat');  // FALSE

If you find a word is being pluralized improperly, it has probably not been defined as uncountable in config/inflector.php. If this is the case, please report an issue.

Parameters

  • string $str required - Word to check

Return Values

  • boolean

Source Code

public static function uncountable($str)
{
	if (Inflector::$uncountable === NULL)
	{
		// Cache uncountables
		Inflector::$uncountable = Kohana::config('inflector')->uncountable;

		// Make uncountables mirrored
		Inflector::$uncountable = array_combine(Inflector::$uncountable, Inflector::$uncountable);
	}

	return isset(Inflector::$uncountable[strtolower($str)]);
}

public static underscore( string $str ) (defined in Kohana_Inflector)

Makes a phrase underscored instead of spaced.

$str = Inflector::underscore('five cats'); // "five_cats";

Parameters

  • string $str required - Phrase to underscore

Return Values

  • string

Source Code

public static function underscore($str)
{
	return preg_replace('/\s+/', '_', trim($str));
}