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

标签 php laravel

我有一个输入,它是一个数组,数组的键是这样的 lang id

<input type="text" name="name[{{ $lang->id }}]">

这个字段是可选的,所以我不想验证它是否是,我想要的是检查数组的两个元素是否为空做一些事情。假设这是输入 name[]

{
    "1": null,
    "2": null
}

我做不到

if($request->has('name')) {
    //do something
}else {
    //do another thing
}

因为 $request有一个名字,有没有办法做这样的事情

if(array_is_empty($request->has('name'))) {
    //do something
}else {
    //do another thing
}

最佳答案

$暗示使用数组过滤器,它将从数组中删除任何空的或错误的项目,然后检查是否留下任何内容:

if(empty(array_filter($array)))

如果您想将空格视为空,例如有人只是在字段中放置空格,您可以放入一个带有修剪作为回调的数组映射,如下所示:

 if(empty(array_filter(array_map('trim',$array))))

测试一下

$a = [
    "1" => null,
    "2" => null
];

if(empty(array_filter($a))) echo 'empty';

输出

 empty

Sandbox

array_filter — Filters elements of an array using a callback function Iterates over each value in the array passing them to the callback function. If the callback function returns true, the current value from array is returned into the result array. Array keys are preserved.

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

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

可能还有其他的,但这应该可以让您有所了解。

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

if(!array_filter($array)) 

但它使代码的可读性稍差,因为它依赖于 PHP 的松散类型,当使用 empty 时,意图是非常清晰的。

关于php - 如何知道输入数组元素是否为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52133025/

相关文章:

mysql - Laravel - 根据另一个模型的功能过滤模型中的行

php - 我无法从 json 编码获得响应

php - 如何在点击 A href 后执行操作

php - 使用ajax在php中删除函数

php - Symfony 5 & EasyAdmin 3.0 - 找不到/admin 路由

mysql - 子查询中不存在的地方

php - Laravel Eloquent ORM 复制

javascript - 在 PHP Laravel 中解析和循环 javascript 对象数组

javascript - Laravel AJAX - 记住多个选择的过滤器

php - 当数据使用 PHP 相交时,将数据从一个 MySQL 表复制到另一个