143 words, 1 min read

When you use enums in PHP, there is no easy way to get the values or names as an array.

This is something which cane easily be fixed with a simple trait like this:

trait HasEnumToArray
{
    public static function names(): array
    {
        return array_column(self::cases(), 'name');
    }

    public static function values(): array
    {
        return array_column(self::cases(), 'value');
    }

    public static function array(): array
    {
        return array_combine(self::values(), self::names());
    }
}

To use it, add the use HasEnumToArray directive into your enum and you're all set.

enum SampleEnum: string
{
    use HasEnumToArray;

    case NameA = 'value_a';
    case NameB = 'value_b';
    case NameC = 'value_c';
}

// Getting the values
SampleEnum::values();
// ['value_a', 'value_b', 'value_c']

// Getting the names
SampleEnum::names();
// ['NameA', 'NameB', 'NameC']

// Getting them as an array
SampleEnum::array();
// [
//     'value_a' => 'NameA',
//     'value_b' => 'NameB',
//     'value_c' => 'NameC',
// ]