是否有一個函數可以給一個數組,如果提供的函數對所有數組都返回true,那麼這個函數會返回true?PHP函數驗證數組
theFunction(array(1,2,3) , 'is_numeric') //true
theFunction(array(1,"b",3) , 'is_numeric') //false
是否有一個函數可以給一個數組,如果提供的函數對所有數組都返回true,那麼這個函數會返回true?PHP函數驗證數組
theFunction(array(1,2,3) , 'is_numeric') //true
theFunction(array(1,"b",3) , 'is_numeric') //false
沒有,但你可以使用array_reduce
:
array_reduce(array(1,2,3),
function ($a, $v) { return $a && is_numeric($v); }, true);
當然你也可以建立自己的高階函數:
function for_all(array $arr, $func) {
return array_reduce($arr,
function ($a, $v) use ($func) {
return $a && call_user_func($func, $v);
}, true);
}
var_dump(
for_all(array(1,2,3), 'is_numeric')
); //true
/**
* all in collection?
*
* Passes each element of the collection to the given function. The method
* returns true if the function never returns false or null.
*
* If the function is not given, an implicit
* function ($v) { return ($v !== null && $v !== false) is added
* (that is all() will return true only if none of the collection members are false or null.)
*
* @param array $arr input array
* @param function $lambda takes an element, returns a bool (optional)
* @return boolean
*/
function all($arr, $lambda=null) {
// these differ from PHP's "falsy" values
if (!is_callable($lambda)) {
foreach ($arr as $value)
if ($value === false || $value === null)
return false;
} else {
foreach ($arr as $value)
if (!call_user_func($lambda, $value))
return false;
}
return true;
}
這是從my implementation解除Ruby的enum
你可以這樣調用它:
var_dump(all($array, 'is_numeric'));
var_dump(all($array, 'is_string'));
var_dump(all($array, function($x) { return $x != 'fun';})); // PHP >= 5.3.0
如果你不介意的效率和更關心簡單,你可以使用min
和array_map
而無需創建新的功能。
(bool)min(array_map('is_numeric', array(1,2,3))); //true
(bool)min(array_map('is_numeric', array(1,"b",3))); //false
此外,如果你想想過程找到一個不適合你可以把它改寫了一下清潔模式。
!array_filter('is_not_numeric', array(1,2,3)); //true
!array_filter('is_not_numeric', array(1,"b",3)); //true
array_filter()
這項工作:
$data = array(1, 2, 3);
if ($data === array_filter($data, 'is_numeric'))
{
// all values of $data are numeric
}
這是爲了驗證對驗證規則的值或只使用可調用的函數:PHP函數或閉包的名字。 https://github.com/ptrofimov/matchmaker
是你的頭像默認的值之一:
您可以準備一套驗證規則,在項目實施的媒人使用它? – quantumSoup 2010-08-08 00:49:41
@quantum是的。我習慣了。 – Artefacto 2010-08-08 00:50:40
兼容性說明:匿名函數只適用於PHP> = 5.3.0 – quantumSoup 2010-08-08 00:52:37