我在寫一個名爲all
的函數來檢查數組$arr
中的所有元素,返回一個值boolean
(基於$f
的返回值)。這是工作正常傳遞自定義函數(請參閱代碼$gte0
已傳遞到all
)。PHP是否有一個true()函數?
但是有時候一個只想檢查數組包含了所有true
值:all(true, $arr)
將無法正常工作becase的true
作爲boolean
傳遞(和true
不是函數名)。 PHP有一個本地true()
類似的功能?
function all($f, array $arr)
{
return empty($arr) ? false : array_reduce($arr, function($v1, $v2) use ($f) {
return $f($v1) && $f($v2);
}, true);
}
$test = array(1, 6, 2);
$gte0 = function($v) { return $v >= 0; }
var_dump(all($gte0, $test)); // True
$test = array(true, true, false);
$id = function($v) { return $v; } // <-- this is what i would avoid
var_dump(all($id, $test)); // False
all(true, $test); // NOT WORKING because true is passed as boolean
all('true', $test); // NOT WORKING because true is not a function
編輯:另一種方式可以在all
功能檢查$f
:
$f = is_bool($f) ? ($f ? function($v) { return $v; }
: function($v) { return !$v; }): $f;
添加此,呼籲all
與true
是完全沒有問題後。
這是編寫代碼IMO的一種非常具有誤導性的方式。特別是你的第二段代碼,很難理解正確的流程 – dynamic
@ yes123你應該在你的評論結尾添加恕我直言。 – gremo
@格雷莫:評論總是陳述性的,絕不會分享意見。這就是爲什麼他們被稱爲評論;) – hakre