2 回答

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超5個贊
不是更好,但您可以過濾并檢查是否為空或使用 (bool) 轉(zhuǎn)換為布爾值:
$hasFoo = array_filter($objs, funtion($v) { return $v->name === ‘foo’; });
$hasFoo = (bool)array_filter($objs, funtion($v) { return $v->name === ‘foo’; });

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超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'; });
該函數(shù)將迭代地調(diào)用回調(diào)直到它返回true,然后它將繼續(xù)遍歷整個數(shù)組(盡管速度相當(dāng)快)。如果數(shù)組中沒有元素返回真值,則函數(shù)返回false.
在每次迭代時發(fā)出調(diào)用并傳遞一個對象,該函數(shù)比普通的foreach.
而且,正如@Jeto 非常正確地指出的那樣,我對它進(jìn)行了過度設(shè)計(jì)。本來可以寫的
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 關(guān)注
- 104 瀏覽
添加回答
舉報(bào)