Talesoft/tale-inflector

View on GitHub
src/Inflector/Strategy/OrdinalStrategy.php

Summary

Maintainability
A
30 mins
Test Coverage
<?php
declare(strict_types=1);

namespace Tale\Inflector\Strategy;

use Tale\Inflector\StrategyInterface;

class OrdinalStrategy implements StrategyInterface
{
    public function inflect(string $string): string
    {
        if (!is_numeric($string)) {
            return $string;
        }

        $number = (int)$string;
        if (!\in_array($number % 100, [11, 12, 13], true)) {
            switch ($number % 10) {
                case 1:
                    return "{$number}st";
                case 2:
                    return "{$number}nd";
                case 3:
                    return "{$number}rd";
            }
        }

        return "{$number}th";
    }
}