mirror of
https://gitee.com/hyperf/hyperf.git
synced 2024-12-03 20:27:59 +08:00
Create Pluralizer.php
This commit is contained in:
parent
5002557073
commit
c9730a6d95
121
src/utils/src/Pluralizer.php
Normal file
121
src/utils/src/Pluralizer.php
Normal file
@ -0,0 +1,121 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Hyperf\Utils;
|
||||||
|
|
||||||
|
|
||||||
|
use Doctrine\Common\Inflector\Inflector;
|
||||||
|
|
||||||
|
class Pluralizer
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Uncountable word forms.
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
public static $uncountable
|
||||||
|
= [
|
||||||
|
'audio',
|
||||||
|
'bison',
|
||||||
|
'cattle',
|
||||||
|
'chassis',
|
||||||
|
'compensation',
|
||||||
|
'coreopsis',
|
||||||
|
'data',
|
||||||
|
'deer',
|
||||||
|
'education',
|
||||||
|
'emoji',
|
||||||
|
'equipment',
|
||||||
|
'evidence',
|
||||||
|
'feedback',
|
||||||
|
'firmware',
|
||||||
|
'fish',
|
||||||
|
'furniture',
|
||||||
|
'gold',
|
||||||
|
'hardware',
|
||||||
|
'information',
|
||||||
|
'jedi',
|
||||||
|
'kin',
|
||||||
|
'knowledge',
|
||||||
|
'love',
|
||||||
|
'metadata',
|
||||||
|
'money',
|
||||||
|
'moose',
|
||||||
|
'news',
|
||||||
|
'nutrition',
|
||||||
|
'offspring',
|
||||||
|
'plankton',
|
||||||
|
'pokemon',
|
||||||
|
'police',
|
||||||
|
'rain',
|
||||||
|
'rice',
|
||||||
|
'series',
|
||||||
|
'sheep',
|
||||||
|
'software',
|
||||||
|
'species',
|
||||||
|
'swine',
|
||||||
|
'traffic',
|
||||||
|
'wheat',
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the plural form of an English word.
|
||||||
|
*
|
||||||
|
* @param string $value
|
||||||
|
* @param int $count
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public static function plural($value, $count = 2)
|
||||||
|
{
|
||||||
|
if ((int)abs($count) === 1 || static::uncountable($value)) {
|
||||||
|
return $value;
|
||||||
|
}
|
||||||
|
|
||||||
|
$plural = Inflector::pluralize($value);
|
||||||
|
|
||||||
|
return static::matchCase($plural, $value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the singular form of an English word.
|
||||||
|
*
|
||||||
|
* @param string $value
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public static function singular($value)
|
||||||
|
{
|
||||||
|
$singular = Inflector::singularize($value);
|
||||||
|
|
||||||
|
return static::matchCase($singular, $value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine if the given value is uncountable.
|
||||||
|
*
|
||||||
|
* @param string $value
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
protected static function uncountable($value)
|
||||||
|
{
|
||||||
|
return in_array(strtolower($value), static::$uncountable);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Attempt to match the case on two strings.
|
||||||
|
*
|
||||||
|
* @param string $value
|
||||||
|
* @param string $comparison
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
protected static function matchCase($value, $comparison)
|
||||||
|
{
|
||||||
|
$functions = ['mb_strtolower', 'mb_strtoupper', 'ucfirst', 'ucwords'];
|
||||||
|
|
||||||
|
foreach ($functions as $function) {
|
||||||
|
if (call_user_func($function, $comparison) === $comparison) {
|
||||||
|
return call_user_func($function, $value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $value;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user