我有一个输入,它是一个数组,数组的键是这样的lang id
someObject
此字段是可选的,所以我不希望验证它是否是,我要检查的是数组的两个元素是否都为空。让我们假设这是输入<input type="text" name="name[{{ $lang->id }}]">
name[]
我做不到
{
"1": null,
"2": null
}
因为if($request->has('name')) {
//do something
}else {
//do another thing
}
有一个名字,有没有办法做这样的事情
$request
答案 0 :(得分:2)
Laravel验证器具有nullable
规则,用于对可选字段进行验证。
https://laravel.com/docs/5.6/validation#a-note-on-optional-fields
并且可以验证数组。
https://laravel.com/docs/5.6/validation#validating-arrays
所以你可以做...
$request->validate([
'name.*' => 'nullable|string',
]);
答案 1 :(得分:1)
$ imply使用数组过滤器,该过滤器将从数组中删除所有空的或虚假的项目,然后检查是否剩余任何东西:
if(empty(array_filter($array)))
如果您要考虑空格为空,例如有人只是在字段中放入空格,则可以将带有trim作为回调的数组映射扔进去,像这样:
if(empty(array_filter(array_map('trim',$array))))
测试
$a = [
"1" => null,
"2" => null
];
if(empty(array_filter($a))) echo 'empty';
输出
empty
array_filter —使用回调函数过滤数组的元素 遍历数组中的每个值,将它们传递给回调函数。如果回调函数返回true,则将数组中的当前值返回到结果数组中。保留阵列键。
PHP会将几件事情视为虚假并删除它们,如果您需要更好的控制,则可以提供自己的回调,但是有些事情被认为是虚假的
0
"0"
""
false
null
[] //this is what you get after filtering $array
可能还有其他人,但这应该可以给您带来启发。
因为数组过滤器返回一个空数组[]
,这也很虚假,如果您不想调用空数组,甚至可以这样做
if(!array_filter($array))
但是,这使代码的可读性降低了,因为它取决于PHP的松散类型,在使用empty
时,意图很明确。