如何知道输入数组元素是否为空?

时间:2018-09-02 00:01:53

标签: php laravel

我有一个输入,它是一个数组,数组的键是这样的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

2 个答案:

答案 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

Sandbox

  

array_filter —使用回调函数过滤数组的元素   遍历数组中的每个值,将它们传递给回调函数。如果回调函数返回true,则将数组中的当前值返回到结果数组中。保留阵列键。

PHP会将几件事情视为虚假并删除它们,如果您需要更好的控制,则可以提供自己的回调,但是有些事情被认为是虚假的

0
"0"
""
false
null
[] //this is what you get after filtering $array

可能还有其他人,但这应该可以给您带来启发。

因为数组过滤器返回一个空数组[],这也很虚假,如果您不想调用空数组,甚至可以这样做

if(!array_filter($array)) 

但是,这使代码的可读性降低了,因为它取决于PHP的松散类型,在使用empty时,意图很明确。