假设我有一个如下所示的枚举:

enum Shippint: string
{
    case Express = 'express';
    case Standard = 'standard';
    case Economy = 'cheap';

    /** @return string[] */
    public static function values(): array
    {
        return array_column(self::cases(), 'value');
    }
}

我有两个数组要进行比较,并执行类似于array_diff的操作

$arr1 = [
   Delivery::tryFrom('express')
   Delivery::tryFrom('cheap')
];
$arra2 = [
   Delivery::tryFrom('express')
   Delivery::tryFrom('standard')
]

我可以遍历每个枚举数组并将其转换为字符串数组

$arrOfStrings1 = [];
$arrayOfStrings2 = [];

foreach($arr1 as $value) {
   $arrOfStrings1[] = $value->value;
}

foreach($arr2 as $value) {
   $arrayOfStrings2[] = $value->value;
}

if (array_diff($arrOfStrings1, $arrayOfStrings2)) {
    echo 'arrays different';
} else {
    echo 'same'
}

我可以将其隐藏在枚举方法中,但是,也许有一些内置的PHP方法可以做到这一点?不幸的是,不可能将__toSting()添加到枚举中,否则可以添加array_diff,因为它会自动将对象转换为字符串.谢谢

推荐答案

你可以使用array_udiff:

if (array_udiff($arr1, $array2, fn ($a, $b) => $a->value <=> $b->value))) {
    echo 'arrays different';
} else {
    echo 'same'
}

Php相关问答推荐

Laravel中的通配符Undot数组

根据用户组或登录状态显示或隐藏定价后添加的文本

LaravelEloquent 地根据表中的值提取记录

Laravel:如何展平多维Eager 加载的集合

WHERE方法不能与有效查询Laravel一起使用

根据WooCommerce购物车页面中的自定义 Select 添加费用

根据WooCommerce中的客户计费国家/地区更改产品价格

如何使用索引加速和优化MySQL搜索

PHP -将字符串拆分为两个相等的部分,但第二个字符串中的单词更多

如何用Ubuntu 22.04在VSCode中启用XDebug

以编程方式同步 WPML 翻译更改 Woocommerce 产品销售价格

在 php 中生成 MAC ISO/IEC 9797-1

循环中未序列化数组显示的问题

Laravel Eloquent:复杂的多对多关系以及缺失关系的默认值

在 PHP 8.2 中使用 PHP Spreadsheet 和 CodeIgniter 3 导出 Excel 时出错

用于检测此模式的正则表达式:something;something=something,something=something... 未知次数

Laravel 测试 assertJsonMissing 不适用于唯一的键.为什么?

遇到特定键时修改二维数组以创建嵌套数据集

使用 splat 运算符时按引用传递 (...)

使用 PHP 有条件地使用关键字 Twilio Programmable SMS