使用 Laravel 验证检查数组中的值是否在另一个数组中

Check if values in array are in another array using Laravel Validation

我想检查我的输入(一个数组)的所有值是否都在另一个数组中。例如:

$my_arr = ['item1', 'item2', 'item3', 'item4'];

Validator::make($request, [
            'item' => [ /* what do i put here??? */ ],
        ]);

我认为规则 in 行不通,因为它需要单个值作为输入,而不是数组。 in_array 也不行。我试过创建自定义规则或闭包,但它们都不允许我传入参数(我要检查的数组)。特别是因为我希望多个数组具有相同的功能,对于不同的输入,如果有一个适用于我给它的任何数组的通用规则会很好。

如果那不可能,我想我需要为每个特定数组创建一个规则并使用 !array_diff($search_this, $all) 作为 this answer 所说。有替代方案吗?

没错,in 不接受数组,而是接受字符串。所以你可以把数组转换成字符串。

$my_arr = ['item1', 'item2', 'item3', 'item4'];

Validator::make($request, [
   'item' => [ 'in:' . implode(',', $my_arr) ],
]);

implode

另一个更好的解决方案可能是使用 Illuminate\Validation\Rulein 接受数组的方法:

'item' => [ Rule::in($my_arr) ],

Laravel Validation - Rule::in