我有一个enum:
enum Type: int { case OFFENSIVE = 1; case SPAM = 2; case IRRELEVANT = 3; }
我知道我可以用Type::cases()得到所有类型和它们的值,但是我如何才能只得到枚举的值(1,2,3)呢?
Type::cases()
sh7euo9m1#
cases()返回单个枚举对象;获取它们的关联值是在每个上查看->value的情况。全文:
cases()
->value
$values = []; foreach ( Type::cases() as $case ) { $values[] = $case->value; }
幸运的是,有一个built-in function array_column基本上为您执行此循环:
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]
huus2vyu2#
也可以使用array_map:
array_map
$values = array_map(fn($i) => $i->value, Type::cases());
hc2pp10m3#
如果枚举类型是这样声明的:
enum Type: int { ... }
这隐式地使用\IntBackedEnum接口实现,因此可以通过以下方式直接引用其值:
Type::SPAM->value
3条答案
按热度按时间sh7euo9m1#
cases()
返回单个枚举对象;获取它们的关联值是在每个上查看->value
的情况。全文:幸运的是,有一个built-in function
array_column
基本上为您执行此循环:你也可以指定你想要的结果数组的 key,所以根据你的需要,很多变化都是可能的:
huus2vyu2#
也可以使用
array_map
:hc2pp10m3#
如果枚举类型是这样声明的:
这隐式地使用\IntBackedEnum接口实现,因此可以通过以下方式直接引用其值: