2 回答
TA贡献1810条经验 获得超5个赞
不是更好,但您可以过滤并检查是否为空或使用 (bool) 转换为布尔值:
$hasFoo = array_filter($objs, funtion($v) { return $v->name === ‘foo’; });
$hasFoo = (bool)array_filter($objs, funtion($v) { return $v->name === ‘foo’; });
TA贡献1784条经验 获得超2个赞
没有(从 PHP 7.3 开始)。
您可以使用更清晰但效率较低的语法array_reduce():
function satisfies(array $objectArray, $callback) {
return array_reduce(
$objectArray,
function($found, $item) use ($callback) {
return $found || call_user_func($callback, $item);
},
false
);
}
$has = satisfies($array, function($obj) { return $obj->name === 'foo'; });
该函数将迭代地调用回调直到它返回true,然后它将继续遍历整个数组(尽管速度相当快)。如果数组中没有元素返回真值,则函数返回false.
在每次迭代时发出调用并传递一个对象,该函数比普通的foreach.
而且,正如@Jeto 非常正确地指出的那样,我对它进行了过度设计。本来可以写的
function satisfies(array $objectArray, $callback, $ifFound = true, $ifNotFound = false) {
foreach ($objectArray as $obj) {
if (call_user_func($callback, $obj)) {
return $ifFound;
}
}
return $ifNotFound;
}
- 2 回答
- 0 关注
- 86 浏览
添加回答
举报