【问题标题】:Getting values for an enum?获取枚举的值?
【发布时间】:2022-11-12 01:42:19
【问题描述】:

我有一个枚举:

enum Type: int
{
    case OFFENSIVE = 1;
    case SPAM = 2;
    case IRRELEVANT = 3;
}

我知道我可以使用Type::cases() 获取所有类型及其值,但我怎样才能获取枚举的值 (1,2,3)?

【问题讨论】:

    标签: php enums


    【解决方案1】:

    cases() 返回单个枚举对象;获取它们的关联值是查看每个值的->value 的情况。在全:

    $values = [];
    foreach ( Type::cases() as $case ) {
        $values[] = $case->value;
    }
    

    幸运的是,有一个 built-in function array_column 基本上为您执行此循环:

    $values = array_column(Type::cases(), 'value');
    

    你也可以指定你想成为的钥匙结果数组,因此根据您的需要可以有很多变化:

    $enum_objects_as_list = Type::cases();
    // [Type::OFFENSIVE, Type::SPAM, Type::IRRELEVANT]
    
    $values_as_list = array_column(Type::cases(), 'value');
    // [1, 2, 3]
    
    $names_as_list = array_column(Type::cases(), 'name');
    // ['OFFENSIVE', 'SPAM', 'IRRELEVANT']
    
    $name_to_value_lookup = array_column(Type::cases(), 'value', 'name');
    // ['OFFENSIVE' => 1, 'SPAM' => 2, 'IRRELEVANT' => 3]
    
    $value_to_name_lookup = array_column(Type::cases(), 'name', 'value');
    // [1 => 'OFFENSIVE', 2 => 'SPAM', 3 => 'IRRELEVANT']
    
    $name_to_enum_object_lookup = array_column(Type::cases(), null, 'name');
    // ['OFFENSIVE' => Type::OFFENSIVE, 'SPAM' => Type::SPAM, 'IRRELEVANT' => Type::IRRELEVANT]
    
    $value_to_enum_object_lookup = array_column(Type::cases(), null, 'value');
    // [1 => Type::OFFENSIVE, 2 => Type::SPAM, 3 => Type::IRRELEVANT]
    

    【讨论】:

      【解决方案2】:

      你也可以使用array_map

      $list = array_map(fn($i) => $i->value, Type::cases());
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-03
        • 1970-01-01
        • 2010-09-17
        • 2010-12-20
        • 2013-04-08
        相关资源
        最近更新 更多