mirror of
https://gitee.com/hyperf/hyperf.git
synced 2024-12-03 04:08:01 +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