0 follower

Final Class Yiisoft\Strings\Inflector

InheritanceYiisoft\Strings\Inflector

Inflector provides methods such as {@see pluralize()} or {@see slug()} that derive a new string based on the string given.

Public Methods

Hide inherited methods

Method Description Defined By
classToTable() Converts a class name to its table name (pluralized) naming conventions. Yiisoft\Strings\Inflector
getPluralizeRules() Yiisoft\Strings\Inflector
getSingularizeRules() Yiisoft\Strings\Inflector
getSpecialRules() Yiisoft\Strings\Inflector
pascalCaseToId() Converts a PascalCase name into an ID in lowercase. Yiisoft\Strings\Inflector
tableToClass() Converts a table name to its class name. Yiisoft\Strings\Inflector
toCamelCase() Returns given word as camelCased. Yiisoft\Strings\Inflector
toHumanReadable() Returns a human-readable string. Yiisoft\Strings\Inflector
toPascalCase() Returns given word as PascalCased. Yiisoft\Strings\Inflector
toPlural() Converts a word to its plural form. Yiisoft\Strings\Inflector
toSentence() Converts an underscored or PascalCase word into a English sentence. Yiisoft\Strings\Inflector
toSingular() Returns the singular of the $word. Yiisoft\Strings\Inflector
toSlug() Returns a string with all spaces converted to given replacement, non word characters removed and the rest of characters transliterated. Yiisoft\Strings\Inflector
toSnakeCase() Returns given word as "snake_cased". Yiisoft\Strings\Inflector
toTransliterated() Returns transliterated version of a string. Yiisoft\Strings\Inflector
toWords() Converts a string into space-separated words. Yiisoft\Strings\Inflector
withPluralizeRules() Yiisoft\Strings\Inflector
withSingularizeRules() Yiisoft\Strings\Inflector
withSpecialRules() Yiisoft\Strings\Inflector
withTransliterationMap() Yiisoft\Strings\Inflector
withTransliterator() Yiisoft\Strings\Inflector
withoutIntl() Disables usage of intl for {@see toTransliterated()}. Yiisoft\Strings\Inflector

Constants

Hide inherited constants

Constant Value Description Defined By
TRANSLITERATE_LOOSE 'Any-Latin; Latin-ASCII; [\u0080-\uffff] remove' Shortcut for Any-Latin; Latin-ASCII; [\u0080-\uffff] remove transliteration rule. The rule is loose, letters will be transliterated with the characters of Basic Latin Unicode Block. For example: 获取到 どちら Українська: ґ,є, Српска: ђ, њ, џ! ¿Español? will be transliterated to huo qu dao dochira Ukrainska: g,e, Srpska: d, n, d! Espanol?. Yiisoft\Strings\Inflector
TRANSLITERATE_MEDIUM 'Any-Latin; Latin-ASCII' Shortcut for Any-Latin; Latin-ASCII transliteration rule. The rule is medium, letters will be transliterated to characters of Latin-1 (ISO 8859-1) ASCII table. For example: 获取到 どちら Українська: ґ,є, Српска: ђ, њ, џ! ¿Español? will be transliterated to huo qu dao dochira Ukrainsʹka: g,e, Srpska: d, n, d! ¿Espanol?. Yiisoft\Strings\Inflector
TRANSLITERATE_STRICT 'Any-Latin; NFKD' Shortcut for Any-Latin; NFKD transliteration rule. The rule is strict, letters will be transliterated with the closest sound-representation chars. The result may contain any UTF-8 chars. For example: 获取到 どちら Українська: ґ,є, Српска: ђ, њ, џ! ¿Español? will be transliterated to huò qǔ dào dochira Ukraí̈nsʹka: g̀,ê, Srpska: đ, n̂, d̂! ¿Español?. For detailed information see unicode normalization forms Yiisoft\Strings\Inflector

Method Details

Hide inherited methods

classToTable() public method

Converts a class name to its table name (pluralized) naming conventions.

For example, converts "Car" to "cars", "Person" to "people", and "ActionLog" to "action_log".

public string classToTable ( string $className )
$className string

The class name for getting related table_name.

                public function classToTable(string $className): string
{
    return $this->toPlural($this->pascalCaseToId($className, '_'));
}

            
getPluralizeRules() public method

public string[] getPluralizeRules ( )
return string[]

The rules for converting a word into its plural form. The keys are the regular expressions and the values are the corresponding replacements.

                public function getPluralizeRules(): array
{
    return $this->pluralizeRules;
}

            
getSingularizeRules() public method

public string[] getSingularizeRules ( )
return string[]

The rules for converting a word into its singular form. The keys are the regular expressions and the values are the corresponding replacements.

                public function getSingularizeRules(): array
{
    return $this->singularizeRules;
}

            
getSpecialRules() public method

public string[] getSpecialRules ( )
return string[]

The special rules for converting a word between its plural form and singular form. The keys are the special words in singular form, and the values are the corresponding plural form.

                public function getSpecialRules(): array
{
    return $this->specialRules;
}

            
pascalCaseToId() public method

Converts a PascalCase name into an ID in lowercase.

Words in the ID may be concatenated using the specified character (defaults to '-'). For example, 'PostTag' will be converted to 'post-tag'.

public string pascalCaseToId ( string $input, string $separator '-', boolean $strict false )
$input string

The string to be converted.

$separator string

The character used to concatenate the words in the ID. It must be valid UTF-8 string.

$strict boolean

Whether to insert a separator between two consecutive uppercase chars, defaults to false.

return string

The resulting ID.

                public function pascalCaseToId(string $input, string $separator = '-', bool $strict = false): string
{
    $regex = $strict
        ? '/(?<=\p{L})(\p{Lu})/u'
        : '/(?<=\p{L})(?<!\p{Lu})(\p{Lu})/u';
    /**
     * @var string $result We assume that `$separator` and `$input` are valid UTF-8 strings, so `preg_replace()`
     * never returns `false`.
     */
    $result = preg_replace($regex, addslashes($separator) . '\1', $input);
    if ($separator !== '_') {
        $result = str_replace('_', $separator, $result);
    }
    return mb_strtolower(trim($result, $separator));
}

            
tableToClass() public method

Converts a table name to its class name.

For example, converts "cars" to "Car", "people" to "Person", and "action_log" to "ActionLog".

public string tableToClass ( string $tableName )
$tableName string

                public function tableToClass(string $tableName): string
{
    return $this->toPascalCase($this->toSingular($tableName));
}

            
toCamelCase() public method

Returns given word as camelCased.

Converts a word like "send_email" to "sendEmail". It will remove non alphanumeric character from the word, so "who's online" will be converted to "whoSOnline".

public string toCamelCase ( string $input )
$input string

The word to convert.

                public function toCamelCase(string $input): string
{
    $input = $this->toPascalCase($input);
    return mb_strtolower(mb_substr($input, 0, 1)) . mb_substr($input, 1);
}

            
toHumanReadable() public method

Returns a human-readable string.

public string toHumanReadable ( string $input, boolean $uppercaseWords false )
$input string

The valid UTF-8 string to humanize.

$uppercaseWords boolean

Whether to set all words to uppercase or not.

                public function toHumanReadable(string $input, bool $uppercaseWords = false): string
{
    /**
     * @var string $input We assume that `$input` is valid UTF-8 string, so `preg_replace()` never returns `false`.
     */
    $input = preg_replace('/_id$/', '', $input);
    $input = str_replace('_', ' ', $input);
    return $uppercaseWords
        ? StringHelper::uppercaseFirstCharacterInEachWord($input)
        : StringHelper::uppercaseFirstCharacter($input);
}

            
toPascalCase() public method

Returns given word as PascalCased.

Converts a word like "send_email" to "SendEmail". It will remove non alphanumeric character from the word, so "who's online" will be converted to "WhoSOnline".

See also toCamelCase().

public string toPascalCase ( string $input )
$input string

The word to PascalCase. It must be valid UTF-8 string.

return string

PascalCased string.

                public function toPascalCase(string $input): string
{
    /**
     * @var string $input We assume that `$input` is valid UTF-8 string, so `preg_replace()` never returns `false`.
     */
    $input = preg_replace('/[^\pL\pN]+/u', ' ', $input);
    return str_replace(
        ' ',
        '',
        StringHelper::uppercaseFirstCharacterInEachWord($input),
    );
}

            
toPlural() public method

Converts a word to its plural form.

Note that this is for English only! For example, "apple" will become "apples", and "child" will become "children".

public string toPlural ( string $input )
$input string

The word to be pluralized.

return string

The pluralized word.

                public function toPlural(string $input): string
{
    if (isset($this->specialRules[$input])) {
        return $this->specialRules[$input];
    }
    foreach ($this->pluralizeRules as $rule => $replacement) {
        if (preg_match($rule, $input)) {
            /** @var string `$rule` and `$replacement` always correct, so `preg_replace` always returns string */
            return preg_replace($rule, $replacement, $input);
        }
    }
    return $input;
}

            
toSentence() public method

Converts an underscored or PascalCase word into a English sentence.

public string toSentence ( string $input, boolean $uppercaseAll false )
$input string

The string to titleize.

$uppercaseAll boolean

Whether to set all words to uppercase.

                public function toSentence(string $input, bool $uppercaseAll = false): string
{
    $input = $this->toHumanReadable($this->pascalCaseToId($input, '_'), $uppercaseAll);
    return $uppercaseAll
        ? StringHelper::uppercaseFirstCharacterInEachWord($input)
        : StringHelper::uppercaseFirstCharacter($input);
}

            
toSingular() public method

Returns the singular of the $word.

public string toSingular ( string $input )
$input string

The english word to singularize.

return string

Singular noun.

                public function toSingular(string $input): string
{
    $result = array_search($input, $this->specialRules, true);
    if ($result !== false) {
        return $result;
    }
    foreach ($this->singularizeRules as $rule => $replacement) {
        if (preg_match($rule, $input)) {
            /** @var string `$rule` and `$replacement` always correct, so `preg_replace` always returns string */
            return preg_replace($rule, $replacement, $input);
        }
    }
    return $input;
}

            
toSlug() public method

Returns a string with all spaces converted to given replacement, non word characters removed and the rest of characters transliterated.

If intl extension isn't available uses fallback that converts latin characters only and removes the rest. You may customize characters map via $transliteration property of the helper.

public string toSlug ( string $input, string $replacement '-', boolean $lowercase true )
$input string

An arbitrary valid UTF-8 string to convert.

$replacement string

The replacement to use for spaces. It must be valid UTF-8 string.

$lowercase boolean

Whether to return the string in lowercase or not. Defaults to true.

return string

The converted string.

                public function toSlug(string $input, string $replacement = '-', bool $lowercase = true): string
{
    $quotedReplacement = preg_quote($replacement, '/');
    /**
     * Replace all non-words character
     *
     * @var string $input We assume that `$input` and `$replacement` are valid UTF-8 strings, so `preg_replace()`
     * never returns `false`.
     */
    $input = preg_replace('/[^a-zA-Z0-9]+/u', $replacement, $this->toTransliterated($input));
    /**
     * Remove first and last replacements
     *
     * @var string $input We assume that `$input` and `$quotedReplacement` are valid UTF-8 strings, so
     * `preg_replace()` never returns `false`.
     */
    $input = preg_replace(
        "/^(?:$quotedReplacement)+|(?:$quotedReplacement)+$/u" . ($lowercase ? 'i' : ''),
        '',
        $input,
    );
    return $lowercase ? strtolower($input) : $input;
}

            
toSnakeCase() public method

Returns given word as "snake_cased".

Converts a word like "userName" to "user_name". It will remove non-alphanumeric character from the word, so "who's online" will be converted to "who_s_online".

public string toSnakeCase ( string $input, boolean $strict true )
$input string

The word to convert. It must be valid UTF-8 string.

$strict boolean

Whether to insert a separator between two consecutive uppercase chars, defaults to true.

return string

The "snake_cased" string.

                public function toSnakeCase(string $input, bool $strict = true): string
{
    /**
     * @var string $input We assume that `$input` is valid UTF-8 string, so `preg_replace()` never returns `false`.
     */
    $input = preg_replace('/[^\pL\pN]+/u', '_', $input);
    return $this->pascalCaseToId($input, '_', $strict);
}

            
toTransliterated() public method

Returns transliterated version of a string.

If intl extension isn't available uses fallback that converts latin characters only and removes the rest. You may customize characters map via $transliteration property of the helper.

public string toTransliterated ( string $input, string|Transliterator|null $transliterator null )
$input string

Input string. It must be valid UTF-8 string.

$transliterator string|Transliterator|null

Either a {@see \Transliterator} or a string from which a {@see \Transliterator} can be built. If null, value set with {@see \Yiisoft\Strings\withTransliterator()} or {@see \Yiisoft\Strings\TRANSLITERATE_LOOSE} is used.

                public function toTransliterated(string $input, $transliterator = null): string
{
    if ($this->useIntl()) {
        if ($transliterator === null) {
            $transliterator = $this->transliterator;
        }
        /**
         * @noinspection PhpComposerExtensionStubsInspection
         * @var string We assume that `$input` are valid UTF-8 strings and `$transliterator` is valid, so
         * `preg_replace()` never returns `false`.
         */
        return transliterator_transliterate($transliterator, $input);
    }
    return strtr($input, $this->transliterationMap);
}

            
toWords() public method

Converts a string into space-separated words.

For example, 'PostTag' will be converted to 'Post Tag'.

public string toWords ( string $input )
$input string

The valid UTF-8 string to be converted.

return string

The resulting words.

                public function toWords(string $input): string
{
    /**
     * @var string $words We assume that `$input` is valid UTF-8 string, so `preg_replace()` never returns `false`.
     */
    $words = preg_replace('/(?<!\p{Lu})(\p{Lu})|(\p{Lu})(?=\p{Ll})/u', ' \0', $input);
    return mb_strtolower(
        trim(
            str_replace(['-', '_', '.'], ' ', $words)
        )
    );
}

            
withPluralizeRules() public method

public self withPluralizeRules ( string[] $rules )
$rules string[]

The rules for converting a word into its plural form.

The keys are the regular expressions and the values are the corresponding replacements.

                public function withPluralizeRules(array $rules): self
{
    $new = clone $this;
    $new->pluralizeRules = $rules;
    return $new;
}

            
withSingularizeRules() public method

public self withSingularizeRules ( string[] $rules )
$rules string[]

The rules for converting a word into its singular form. The keys are the regular expressions and the values are the corresponding replacements.

                public function withSingularizeRules(array $rules): self
{
    $new = clone $this;
    $new->singularizeRules = $rules;
    return $new;
}

            
withSpecialRules() public method

public self withSpecialRules ( string[] $rules )
$rules string[]

The special rules for converting a word between its plural form and singular form.

                public function withSpecialRules(array $rules): self
{
    $new = clone $this;
    $new->specialRules = $rules;
    return $new;
}

            
withTransliterationMap() public method

public $this withTransliterationMap ( string[] $transliterationMap )
$transliterationMap string[]

Fallback map for transliteration used by {@see \Yiisoft\Strings\toTransliterated()} when intl isn't available or turned off with {@see \Yiisoft\Strings\withoutIntl()}.

                public function withTransliterationMap(array $transliterationMap): self
{
    $new = clone $this;
    $new->transliterationMap = $transliterationMap;
    return $new;
}

            
withTransliterator() public method
public self withTransliterator ( string|Transliterator $transliterator )
$transliterator string|Transliterator

Either a {@see \Transliterator}, or a string from which a {@see \Transliterator} can be built for transliteration. Used by {@see \Yiisoft\Strings\toTransliterated()} when intl is available. Defaults to {@see \Yiisoft\Strings\TRANSLITERATE_LOOSE}.

                public function withTransliterator($transliterator): self
{
    $new = clone $this;
    $new->transliterator = $transliterator;
    return $new;
}

            
withoutIntl() public method

Disables usage of intl for {@see toTransliterated()}.

public self withoutIntl ( )

                public function withoutIntl(): self
{
    $new = clone $this;
    $new->withoutIntl = true;
    return $new;
}