php 获取枚举的值?

px9o7tmv  于 2023-06-04  发布在  PHP
关注(0)|答案(3)|浏览(240)

我有一个enum:

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

我知道我可以用Type::cases()得到所有类型和它们的值,但是我如何才能只得到枚举的值(1,2,3)呢?

sh7euo9m

sh7euo9m1#

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

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

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

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

你也可以指定你想要的结果数组的 key,所以根据你的需要,很多变化都是可能的:

$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]
huus2vyu

huus2vyu2#

也可以使用array_map

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

hc2pp10m3#

如果枚举类型是这样声明的:

enum Type: int { 
    ...
}

这隐式地使用\IntBackedEnum接口实现,因此可以通过以下方式直接引用其值:

Type::SPAM->value

相关问题