phpphp-8.1

How to get all values of an enum in PHP?


PHP 8.1 is almost getting released, including support for Enumerations. I was testing some of the enum functionality and couldn't find much documentation about it. Hence my question: how do I get all values of an enum?


Solution

  • For basic enums:

    $suits = array_column(Suit::cases(), 'name');
    

    For backed enums where you want the values:

    $suits = array_column(Suit::cases(), 'value');
    

    You could then do something like this:

    trait EnumToArray
    {
    
      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());
      }
    
    }
    
    enum Suit: string
    {
    
      use EnumToArray;
    
      case Hearts = 'H';
      case Diamonds = 'D';
      case Clubs = 'C';
      case Spades = 'S';
    
    }
    

    Suit::array() will return:

    Array
    (
        [H] => Hearts
        [D] => Diamonds
        [C] => Clubs
        [S] => Spades
    )