バリデーションに array_reduce を使う
foreach や array_reduce で同じ変数に複数の関数を適用するの記事の別の例。
function validate($input, $validators)
{
$ret = [];
foreach ($validators as $validator) {
if (!$validator['func']($input)) {
$ret[] = $validator['error'];
}
}
return $ret;
}
function validate2($input, $validators)
{
return array_reduce($validators,
function($ret, $validator) use ($input) {
if (!$validator['func']($input)) {
$ret[] = $validator['error'];
}
return $ret;
},
[]);
}
$validators = [
[
'func' => function($x) { return 0 < $x; },
'error' => '0以上の値を入力してください'
],
[
'func' => function($x) { return $x < 10; },
'error' => '10未満の値を入力してください'
]
];
var_dump(validate2(11, $validators));