我用written a Composer package来表示othyn/php-enum-enhancements,因为UnitEnum::cases()方法不是我要找的,因为它返回一个MySuperCoolEnum示例的数组,而不是我想要的原始类型的底层值。 它是一个可以很容易地添加到任何枚举中的特性,该枚举执行以下操作:
<?php
namespace App\Enums;
use Othyn\PhpEnumEnhancements\Traits\EnumEnhancements;
enum TestEnum
{
use EnumEnhancements;
case Alpha;
case Bravo;
case Charlie;
case Delta;
case Echo;
}
var_dump(TestEnum::valueArray());
// Results in the following being printed:
// array(5) {
// [0]=>
// string(5) "Alpha"
// [1]=>
// string(5) "Bravo"
// [2]=>
// string(7) "Charlie"
// [3]=>
// string(5) "Delta"
// [4]=>
// string(4) "Echo"
// }
var_dump(TestEnum::valueList());
// Results in the following being printed:
// string(34) "Alpha, Bravo, Charlie, Delta, Echo"
var_dump(TestEnum::valueList(separator: ':'));
// Results in the following being printed:
// string(30) "Alpha:Bravo:Charlie:Delta:Echo"
......对于支持枚举,下面是一个string示例:
<?php
namespace App\Enums;
use Othyn\PhpEnumEnhancements\Traits\EnumEnhancements;
enum TestStringBackedEnum: string
{
use EnumEnhancements;
case Alpha = 'alpha';
case Bravo = 'bravo';
case Charlie = 'charlie';
case Delta = 'delta';
case Echo = 'echo';
}
var_dump(TestStringBackedEnum::valueArray());
// Results in the following being printed:
// array(5) {
// [0]=>
// string(5) "alpha"
// [1]=>
// string(5) "bravo"
// [2]=>
// string(7) "charlie"
// [3]=>
// string(5) "delta"
// [4]=>
// string(4) "echo"
// }
var_dump(TestStringBackedEnum::valueList());
// Results in the following being printed:
// string(34) "alpha, bravo, charlie, delta, echo"
var_dump(TestStringBackedEnum::valueList(separator: ':'));
// Results in the following being printed:
// string(30) "alpha:bravo:charlie:delta:echo"
7条答案
按热度按时间bttbmeg01#
对于基本枚举:
对于需要值的支持枚举:
然后,您可以执行以下操作:
Suit::array()
将返回:de90aj5v2#
经过一番研究,我发现the answer.你可以使用静态方法:
cases()
.cases方法将为每个值返回一个包含枚举(
UnitEnum
接口)的数组。gajydyqb3#
需要值而不需要枚举示例?
我用written a Composer package来表示
othyn/php-enum-enhancements
,因为UnitEnum::cases()
方法不是我要找的,因为它返回一个MySuperCoolEnum
示例的数组,而不是我想要的原始类型的底层值。它是一个可以很容易地添加到任何枚举中的特性,该枚举执行以下操作:
UnitEnum::valueArray(): array
方法,该方法将枚举中的所有值作为类型相同的枚举值数组返回UnitEnum::valueList(string $separator = ', '): string
方法,该方法将枚举中的所有值作为逗号分隔的列表字符串返回其中,对于 normal 枚举,将生成以下内容:
......对于支持枚举,下面是一个
string
示例:...是的,它也能在
int
上工作!在包的自述文件的用法部分有更多的例子。
lnlaulya4#
除了
UnitEnum::cases()
之外,您还可以将ReflectionEnum
与以下命令一起使用注意,在这两种情况下,您都不能获得枚举方法。但只要
ReflectionEnum
扩展ReflectionClass
,您就可以使用其余的ReflectionClass方法,例如getMethods
of1yzvn45#
我认为最好的选择是使用一个特性。
例如:EnumsToArray.php
稍后,在枚举中应该有:
tzcvj98z6#
我在我的项目中使用了以下内容;
这将产生一个如下所示的关联数组;
使用字符串作为值
或者当使用整数作为值时
现在可以使用数组获取所需的任何信息,并且只能使用
array_keys()
或array_values()
获取列或值我已经使用这段代码在一个表单select中轻松地foreach了它们
llew8vvj7#
我把@Michael的一个小改动打包成了一个小包,因为我在多个项目中都需要它:
https://github.com/laracraft-tech/laravel-useful-traits#usefulenums
通过编写器安装:
这是它的工作方式: