你的意思是这样的:
$arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
$findValue = 8;
$result = array_filter(
$arr,
function ($arrValue) use($findValue) {
return ($arrValue % $findValue) == 0;
}
);
EDIT
也许你的意思更像是:
$arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
$findValue = 3;
foreach(array_filter(
$arr,
function ($arrValue) use($findValue) {
return ($arrValue % $findValue) == 0;
}
) as $key => $value) {
echo $value, ' is a multiple of ', $findValue, PHP_EOL;
}
EDIT #2
或者你的意思是更复杂的东西,比如:
function filter($values, $function) {
return array_filter(
$values,
$function
);
}
$isEven = function ($value) {
return !($value & 1);
};
$isOdd = function ($value) {
return $value & 1;
};
$data = range(1,10);
echo 'array_filter() for Odds', PHP_EOL;
var_dump(
filter(
$data,
$isOdd
)
);
echo 'array_filter() for Evens', PHP_EOL;
var_dump(
filter(
$data,
$isEven
)
);
或者也使用 PHP 5.5 生成器:
$isEven = function ($value) {
return !($value & 1);
};
$isOdd = function ($value) {
return $value & 1;
};
function xFilter(callable $callback, $args=array()) {
foreach($args as $arg) {
if (call_user_func($callback, $arg)) {
yield $arg;
}
}
}
echo 'xFilter for Odds', PHP_EOL;
foreach(xFilter($isOdd, range(1,10)) as $i) {
echo('num is: '.$i.PHP_EOL);
}
echo 'xFilter for Evens', PHP_EOL;
foreach(xFilter($isEven, range(1,10)) as $i) {
echo('num is: '.$i.PHP_EOL);
}