2 回答

TA貢獻1810條經(jīng)驗 獲得超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條經(jīng)驗 獲得超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ù)將迭代地調用回調直到它返回true,然后它將繼續(xù)遍歷整個數(shù)組(盡管速度相當快)。如果數(shù)組中沒有元素返回真值,則函數(shù)返回false.
在每次迭代時發(fā)出調用并傳遞一個對象,該函數(shù)比普通的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 關注
- 109 瀏覽
添加回答
舉報