/** * @param callable $callable * @return \Closure */ function bulkPool(callable $callable) { return function ($value) use($callable) { if (!is_array($value) && !$value instanceof \Traversable) { return false; } $args = func_get_args(); foreach ($value as $item) { $args[0] = $item; if (variadicCallBoolVal($callable, $args)) { return true; } } return false; }; }
/** * @param string $key * @param callable $callback * @return \Closure */ function keyApply($key, callable $callback) { if (!is_string($key)) { return never(); } return combine(hasKey($key), function ($item) use($key, $callback) { $args = func_get_args(); $args[0] = polymorphicKeyValue($item, $key); return variadicCallBoolVal($callback, $args); }); }
/** * @param callable[] $callbacks * @return \Closure */ function poolMap(array $callbacks) { $callbacks = array_filter($callbacks, 'is_callable'); if (empty($callbacks)) { return never(); } return function ($item) use($callbacks) { if (!is_array($item) && !is_object($item)) { return false; } foreach ($callbacks as $key => $callback) { if (variadicCallBoolVal(keyApply($key, $callback), func_get_args())) { return true; } } return false; }; }