获取枚举值?
Getting values for an enum?
我有一个枚举:
enum Type: int
{
case OFFENSIVE = 1;
case SPAM = 2;
case IRRELEVANT = 3;
}
我知道我可以使用 Type::cases()
获取所有类型及其值,但我怎样才能获取枚举的值 (1,2,3)?
cases()
returns 单个枚举对象;获取它们的关联值就是在每个值上查看 ->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]
你也可以使用array_map
:
$list = array_map(fn($i) => $i->value, Type::cases());
我有一个枚举:
enum Type: int
{
case OFFENSIVE = 1;
case SPAM = 2;
case IRRELEVANT = 3;
}
我知道我可以使用 Type::cases()
获取所有类型及其值,但我怎样才能获取枚举的值 (1,2,3)?
cases()
returns 单个枚举对象;获取它们的关联值就是在每个值上查看 ->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]
你也可以使用array_map
:
$list = array_map(fn($i) => $i->value, Type::cases());