miroshnikov / idles
A PHP functional utility library, port of Lodash/Ramda with lazy (idle) evaluation
Installs: 175
Dependents: 1
Suggesters: 0
Security: 0
Stars: 11
Watchers: 3
Forks: 1
Open Issues: 0
pkg:composer/miroshnikov/idles
Requires
- php: >=7.4
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.14
- pestphp/pest: ^2.34
- phpstan/phpstan: ^2.1
- squizlabs/php_codesniffer: ^3.7
README
IDLES - a PHP functional library
A PHP functional utility library, port of Javascript Lodash/Fp and Ramda libraries to PHP.
All functions are side-effect free and automatically curried, data is immutable.
The iterable collection parameter is usually supplied last to make currying convenient.
Lazy / delayed evaluation is supported in functional pipelines.
Go to https://idlephp.tech for more details, documentation and examples.
Requirements
PHP 7.4 or higher
Installation
composer require miroshnikov/idles
Roadmap
Note
Idles is currently under active development. Roadmap is to add all methods from Lodash and Ramda libraries and some functional tools.
Documentation
Array
concat
concat(?iterable $array, $value): iterable
Concatinates $array with additional iterables/values
count
count(callable $predicate, ?iterable $collection): int
Counts the number of items in $collection matching the $predicate
countBy
countBy(callable $iteratee, ?iterable $collection): array
Returns an array: [$iteratee($value) => number of times the $iteratee($value) was found in $collection]
drop
drop(int $n, ?iterable $collection): iterable
Skips the first $n elemens and returns the rest of the iterable
dropRight
dropRight(int $n, ?iterable $collection): iterable
Skips the last $n elements
findIndex
findIndex(callable $predicate, ?iterable $collection): int
Like find but returns the index of the first element predicate returns truthy for, -1 if not found
findLastIndex
findLastIndex(callable $predicate, ?iterable $collection): int
Like find but returns the index of the last element predicate returns truthy for, -1 if not found
flatten
flatten(?iterable $collection): iterable
Flattens iterable a single level deep.
flattenDeep
flattenDeep(?iterable $collection): iterable
Recursively flattens iterable.
flattenDepth
flattenDepth(int $depth, ?iterable $collection): iterable
Recursively flatten array up to depth times.
fromPairs
fromPairs(?iterable $collection): array
Creates a new record from a list key-value pairs. The inverse of toPairs.
head
head(?iterable $collecton)
Gets the first element of iterable
indexOf
indexOf($value, ?iterable|string $collection): int
Returns the index of the first occurrence of $value in iterable or string, else -1.
intersection
intersection(?iterable $record1, ?iterable $record2): array
Returns unique values that are included in both records
intersectionBy
intersectionBy(callable $iteratee, ?iterable $record1, ?iterable $record2): array
Like intersection but invokes $iteratee for each element before comparison.
intersectionWith
intersectionWith(callable $comparator, ?iterable $record1, ?iterable $record2): array
Like intersection but invokes $comparator to compare elements.
join
join(string $separator, ?iterable $collection): string
Joins iterable elements separated by $separator
last
last(?iterable $collecton)
Gets the last element of iterable
lastIndexOf
lastIndexOf($value, ?iterable|string $collection): int
Returns the index of the last occurrence of $value in iterable or string, else -1.
nth
nth(int $offset, ?iterable $collection)
Returns the $offset element. If $offset is negative the element at index length + $offset is returned.
remove
remove(int $start, int $count, ?iterable $iterable): array
Removes items from $iterable starting at $start and containing $count elements.
slice
slice(int $start, int ?$end, ?iterable $collection): iterable
Retruns a slice of $iterable from $start up to, but not including, $end.
splitAt
splitAt(int $index, array|string $array): array
Splits a given array or string at a given index.
splitEvery
splitEvery(int $length, array|string $array): array
Splits an array or string into slices of the specified length
splitWhen
splitWhen(callable $predicate, array $array): array
Splits an array by predicate.
splitWhenever
splitWhenever(callable $predicate, array $array): array
Splits an array into slices on every occurrence of a value.
take
take(int $n, ?iterable $collection): iterable
Takes n first elements from iterable
takeRight
takeRight(int $n, ?iterable $collection): array
Returns a slice of iterable with n elements taken from the end.
uniq
uniq(?iterable $collection): array
Removes duplicates using ===
uniqueBy
uniqBy(callable $iteratee, ?iterable $collection): array
Like uniq but apply $iteratee fist
uniqWith
uniqWith(callable $predicate, ?iterable $collection): array
Like uniq but uses $predicate to compare elements
without
without(array $values, ?iterable $collection): iterable
Returns $iterable without $values
zip
zip(iterable $a, iterable $b): iterable
Creates an iterable of grouped elements, the first of which contains the first elements of the given iterables, the second of which contains the second elements, and so on.
zipWith
zipWith(callable $iteratee, iterable $a, iterable $b): iterable
Like zip except that it accepts $iteratee to specify how grouped values should be combined.
Collection
all
all(?callable $predicate, ?iterable $collection): bool
Checks if $predicate returns truthy for all elements of $collection. Stop once it returns falsey
any
any(callable $predicate, ?iterable $collection): bool
Checks if $predicate returns truthy for any element of $collection. Stops on first found.
each
each(callable $iteratee, ?iterable $collection): iterable
Iterates over elements of $collection. Iteratee may exit iteration early by returning false.
filter
filter(callable $predicate, ?iterable $collection): iterable
Returns elements $predicate returns truthy for.
find
find(?callable $predicate, ?iterable $collection)
Returns the first element $predicate returns truthy for.
flatMap
flatMap(callable $iteratee, ?iterable $collection): iterable
Maps then flatten
flatMapDeep
flatMapDeep(callable $iteratee, ?iterable $collection): iterable
Like flatMap but recursively flattens the results.
flatMapDepth
flatMapDepth(callable $iteratee, int $depth, ?iterable $collection): iterable
Like flatMap but flattens the mapped results up to $depth times
groupBy
groupBy(callable $iteratee, ?iterable $collection): array
Creates an array composed of keys generated from running each value through $iteratee.
includes
includes($value, ?iterable $collection): bool
Checks if $value is in $collection.
indexBy
indexBy(callable $iteratee, ?iterable $collection): iterable
Creates a record composed of keys generated from the results of running each element of $collection through $iteratee.
map
map(callable $iteratee, ?iterable $collection)
Run each element in $collection through $iteratee.
orderBy
orderBy(array $iteratees, array $orders, ?iterable $collection)
Like sortBy but allows specifying the sort orders
partition
partition(callable $predicate, ?iterable $collection): array
Split $collection into two groups, the first of which contains elements $predicate returns truthy for, the second of which contains elements $predicate returns falsey for.
reduce
reduce(callable $iteratee, $accumulator, ?iterable $collection)
Reduces $collection to a value which is the accumulated result of running each element in collection through $iteratee
resolve
resolve(array $resolvers, array $record): array
Adds new properties to $record using $resolvers.
sort
sort(array $comparator, ?iterable $collection): array
Sorts $collection using $comparator comparison ($a <=> $b) function
sortBy
sortBy(array $comparators, ?iterable $collection): array
Sorts $collection in ascending order according to $comparators.
sortWith
sortWith(array $comparators, ?iterable $collection): array
Sorts a $collection according to an array of comparison ($a <=> $b) functions
values
values(?iterable $collection): iterable
Returns an indexed iterable of values in $collection.
Function
always
always($value)
Returns a function that always returns the given value.
apply
apply(callable $fn, ?iterable $args)
Calls $fn(...$args)
applyTo
applyTo($value, callable $interceptor)
Returns $interceptor($value).
ary
ary(int $n, callable $fn): callable
Creates a function that invokes $fn, with up to $n arguments, ignoring any additional arguments.
ascend
ascend(callable $func, $a, $b): callable
Makes an ascending comparator function out of a function that returns a value that can be compared with <=>
attempt
attempt(callable $fn)
Calls $fn, returning either the result or the caught exception.
compose
compose(callable ...$funcs): callable
Like pipe but invokes the functions from right to left.
curry
curry(callable $f): callable
\Idles\_ const may be used as a placeholder.
curryRight
curryRight(callable $f): callable
Like curry but arguments are prepended.
descend
descend(callable $func, $a, $b): callable
Makes an descending comparator function out of a function that returns a value that can be compared with <=>
flip
flip(callable $fn): callable
Returns a new curried function with the first two arguments reversed
juxt
juxt(array $funcs): callable
Applies a list of functions to a list of values.
memoize
memoize(callable $func): callable
Creates a function that memoizes the result of $func. $resolver returns map cache key, args[0] by default.
negate
negate(callable $predicate): callable
Creates a function that negates the result of the $predicate function.
nthArg
nthArg(int $n): callable
Returns a function which returns its $nth argument.
once
once(callable $fn): callable
$fn is only called once, the first value is returned in subsequent invocations.
partial
partial(callable $fn, array $partials): callable
Creates a function that invokes $fn with $partials prepended to the arguments. \Idles\_ const may be used as a placeholder.
partialRight
partialRight(callable $fn, array $partials): callable
Like partial but $partials are appended.
pipe
pipe(callable ...$funcs): callable
Left-to-right function composition. The first argument may have any arity; the remaining arguments must be unary.
rearg
rearg(array $indexes, callable $f): callable
Returns a function that invokes $f with arguments rearranged by props($indexes)
tap
tap(callable $interceptor, $value)
Calls $interceptor($value) then returns the original $value
times
times(callable $iteratee, int $n): array
Calls the iteratee $n times, returning an array of the results of each invocation.
tryCatch
tryCatch(callable $tryer, callable $catcher, $value)
Calls $tryer, if it throws, calls $catcher
unapply
unapply(callable $fn)
Returns fn (...$args) => $fn($args)
unary
unary(callable $fn): callable
ary(1, $fn)
useWith
useWith(callable $fn, array $transformers)
Applies each transformer function to each argument.
Logic
allPass
allPass(array $predicates): callable
Returns a function that checks if its arguments pass all $predicates.
anyPass
anyPass(array $predicates): callable
Returns a function that checks if its arguments pass any of the $predicates.
both
both(callable $func1, callable $func2): callable
Resulting function returns $func1(...$args) if it is falsy or $func2(...$args) otherwise, short-circuited
cond
cond(array $pairs): callable
Iterates over $pairs and invokes the corresponding function of the first predicate to return truthy.
defaultTo
defaultTo($default)($value)
Returns $value ?? $default
either
either(callable $func1, callable $func2): callable
Resulting function returns $func1(...$args) if it is truthy or $func2(...$args) otherwise, short-circuited.
ifElse
ifElse(callable $predicate, callable $onTrue, callable $onFalse): callable
Resulting function returns $onTrue(...$args) if $predicate(...$args) is truthy or $onFalse(...$args) otherwise.
not
not($a): bool
returns !$a
unless
unless(callable $predicate, callable $whenFalse, mixed $value)
Returns $predicate($value) ? $value : $whenFalse($value)
when
when(callable $predicate, callable $whenTrue, mixed $value)
Returns $predicate($value) ? $whenTrue($value) : $value
Math
add
add(int|float $a, int|float $b): int|float
$a + $b
dec
dec(int $number): int
Returns $number - 1
divide
divide(int|float $a, int|float $b): int|float
$a / $b
gt
gt($a, $b): bool
$a > $b
gte
gte($a, $b): bool
$a >= $b
inc
inc(int $number): int
Returns $number + 1
lt
lt($a, $b): bool
$a < $b
lte
lte($a, $b): bool
$a <= $b
modulo
modulo(int|float $a, int|float $b): int
$a % $b
multiply
multiply(int|float $a, int|float $b): int|float
$a * $b
round
round(int $precision, int|float $number): float
Rounds $numberto specified $precision
subtract
subtract(int|float $a, int|float $b): int|float
$a - $b
sum
sum(?iterable $collection): int|float
Sums elements in iterable
sumBy
sumBy(?callable $iteratee, ?iterable $collection): int|float
Like sum but $iteratee is invoked for each element in iterable to generate the value to be summed.
Record
assignDeep
assignDeep(array $iterables): array
Merges properties recursively, numeric keys are overwritten.
defaults
defaults(?iterable $record1, ?iterable $record2): array
Merges properties from right to left, numeric keys are overwritten.
evolve
evolve(array $transformations, ?iterable $record): array
Creates a new record by recursively calling transformation functions with $record properties.
extend
extend(?iterable $source1, ?iterable $source2): array
Merges properties, numeric keys are overwritten.
has
has(string|int $key, ?iterable $record): bool
Checks if $record has $key
hasPath
hasPath(string|int|array $path, ?iterable $record): bool
Checks if $path exists in $record
invert
invert(?iterable $collection): array
Replaces keys with values. Duplicate keys are overwritten.
keys
keys(?iterable $record): iterable
Returns an indexed iterable of keys in $record.
merge
merge(?iterable $source1, ?iterable $source2): array
Merges properties, numeric keys are appended.
mergeDeep
mergeDeep(array $iterables): array
Merges properties recursively, numeric keys are appended.
mergeLeft
mergeLeft(?iterable $left, ?iterable $right): array
calls merge($right, $left)
mergeWith
mergeWith(callable $customizer, ?iterable $left, ?iterable $right): array
Like merge but if a key exists in both records, $customizer is called to the values associated with the key
modifyPath
modifyPath(array|string|int $path, callable $updater, ?iterable $record)
Creates new record by applying an $updater function to the value at the given $path.
objOf
objOf(string $key, $value): array
Creates an array containing a single key => value pair.
omit
omit(array $keys, ?iterable $collection): iterable
The opposite of pick. Returns record without $keys.
omitBy
omitBy(callable $predicate, ?iterable $record): iterable
The opposite of pickBy. Returns properties of $record that $predicate returns falsey for.
path
path(array|string $path, ?iterable $collection)
Retrieve the value at a given path.
paths
paths(array $paths, ?iterable $collection): array
Keys in, values out. Order is preserved.
pick
pick(array $keys, ?iterable $collection): iterable
Returns record containing only $keys
pickBy
pickBy(callable $predicate, ?iterable $record): iterable
Returns record containing only keys $predicate returns truthy for.
pluck
pluck(string|int $key, ?iterable $collection)
Returns a new array by plucking the same named property off all records in the array supplied.
project
project(array $props, ?iterable $collection)
Like SQL select statement.
prop
prop(string|int $key, ?iterable $record)
Return the specified property.
propEq
propEq(string|int $key, $value, ?iterable $record): bool
Returns $record[$key] == $value
setPath
setPath($path, $value, ?iterable $record)
Return copy $record with $path set with $value
toPairs
toPairs(?iterable $record): iterable
Converts a record into an array of [$key, $value]
where
where(array $spec, ?iterable $record): bool
Checks if $record satisfies the spec by invoking the $spec properties with the corresponding properties of $record.
whereAny
whereAny(array $spec, ?iterable $record): bool
Checks if $record satisfies the spec by invoking the $spec properties with the corresponding properties of $record. Returns true if at least one of the predicates returns true.
whereEq
whereEq(array $spec, ?iterable $test): bool
Check if the $test satisfies the $spec
String
camelCase
camelCase(string $s): string
Converts string to camel case.
capitalize
capitalize(string $s): string
Converts the first character of string to upper case and the remaining to lower case.
escape
escape(string $s): string
Converts the characters "&", "<", ">", '"', and "'" to their corresponding HTML entities.
escapeRegExp
escapeRegExp(string $regexp): string
Escapes regular expression
split
split(string $separator, string $s): array
Splits string by $separator regular expression.
startsWith
startsWith(string $target, string $s): bool
If string starts with $target.
toLower
toLower(string $s): string
Converts string to lower case
toUpper
toUpper(string $s): string
Converts string to upper case
trim
trim(string $characters, string $string): string
Strip characters from the beginning and end of a string.
trimEnd
trimEnd(string $characters, string $string): string
Strip characters from the end of a string.
trimStart
trimStart(string $characters, string $string): string
Strip characters from the beginning of a string.
words
words(string $pattern, string $string): array
Splits string into an array of its words.
Util
collect
collect(?iterable $iterable): array
Collects any iterable into array
eq
eq($a, $b): bool
$a == $b
equals
equals($a, $b): bool
$a === $b
F
F(...$args): bool
Always returns false
identity
identity($value)
Returns the first argument it receives.
iterate
iterate(callable $f, $value): iterable
Returns a generator of $value, $f($value), $f($f($value)) etc.
just
just($value): Optional
Returns an Optional with the specified non-null value
nothing
nothing(): Optional
Returns an empty Optional
now
now(): int
Returns the timestamp of the number of seconds
Optional
just(mixed $value): Optional
Maybe/Option monad (container) which may or may not contain a non-null value. Has methods:
isPresent(): bool - true if not empty
isEmpty(): bool - true if empty
get(): mixed - returns value, throw exception if empty
orElse(mixed $default): mixed - returns the contained value if the optional is nonempty or $default
orElseThrow(Exception $e) - returns the contained value, if present, otherwise throw an exception
map(callable $f): Optional - If a value is present, apply the $f to it, and if the result is non-null, return an Optional describing the result
flatMap(callable $f): Optional - use instead of map if $f returns Optional
filter(callable $predicate): Optional - if a value is present and matches the $predicate, return an Optional with the value, otherwise an empty Optional.
size
size(array|Countable|object|string|callable $value): int
Returns size of a countable, number of parameters of a function, lenght of string or number of properties of an object
T
T(...$args): bool
Always returns true