Skip to content

Commit

Permalink
Merge branch '__rultor'
Browse files Browse the repository at this point in the history
  • Loading branch information
rultor committed May 20, 2023
2 parents 7ee13ff + 91bc1d1 commit c6c5ae6
Show file tree
Hide file tree
Showing 3 changed files with 202 additions and 58 deletions.
41 changes: 41 additions & 0 deletions src/Any/Reduced.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
<?php

declare(strict_types=1);

namespace Maxonfjvipon\ElegantElephant\Any;

use Maxonfjvipon\ElegantElephant\Any;
use Maxonfjvipon\ElegantElephant\Arr;

use function Maxonfjvipon\ElegantElephant\reduced;

/**
* Array reduced.
*/
final class Reduced implements Any
{
/**
* @var callable $callback
*/
private $callback;

/**
* @param array<mixed>|Arr $arr
* @param callable $callback
* @param mixed $init
* @param bool $ensureInit
*/
public function __construct(
private array|Arr $arr,
callable $callback,
private mixed $init,
private bool $ensureInit = false
) {
$this->callback = $callback;
}

public function value(): mixed
{
return reduced($this->arr, $this->callback, $this->init, $this->ensureInit);
}
}
137 changes: 79 additions & 58 deletions src/functions.php
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
<?php

/**
* The MIT License (MIT)
*
Expand Down Expand Up @@ -26,22 +27,17 @@

namespace Maxonfjvipon\ElegantElephant;

use Closure;
use Exception;
use Maxonfjvipon\ElegantElephant\Any;
use Maxonfjvipon\ElegantElephant\Any\AnyOf;
use Maxonfjvipon\ElegantElephant\Arr;
use Maxonfjvipon\ElegantElephant\Logic;
use Maxonfjvipon\ElegantElephant\Num;
use Maxonfjvipon\ElegantElephant\Txt;
use Closure;
use ReflectionFunction;

// ENSURED
if (!function_exists('ensured_any')) {
/**
* Ensure any value.
*
* @param mixed $any Value to be ensured
* @param mixed $any Value to be ensured
* @return mixed Ensured value
* @throws Exception If fails
*/
Expand Down Expand Up @@ -79,7 +75,7 @@ function ensured_any(mixed $any): mixed
/**
* Ensured array.
*
* @param array<mixed>|Arr $arr
* @param array<mixed>|Arr $arr
* @return array<mixed>
* @throws Exception
*/
Expand All @@ -100,7 +96,7 @@ function ensured_bool(bool|Logic $boolOrLogic): bool
/**
* Ensured string.
*
* @param string|Txt $stringOrTxt Text to be ensured
* @param string|Txt $stringOrTxt Text to be ensured
* @return string Ensured string
* @throws Exception If fails
*/
Expand All @@ -115,9 +111,9 @@ function ensured_string(string|Txt $stringOrTxt): string
/**
* Conditional Any.
*
* @param bool|Logic $condition Condition
* @param mixed $first First value
* @param mixed $second Alternative value
* @param bool|Logic $condition Condition
* @param mixed $first First value
* @param mixed $second Alternative value
*
* @see AnyCond
*/
Expand All @@ -131,9 +127,9 @@ function any_cond(bool|Logic $condition, mixed $first, mixed $second): mixed
/**
* Conditional Any.
*
* @param bool|Logic $condition Condition
* @param mixed $first First value
* @param mixed $second Alternative value
* @param bool|Logic $condition Condition
* @param mixed $first First value
* @param mixed $second Alternative value
*
* @see AnyFork
*/
Expand All @@ -143,12 +139,33 @@ function any_fork(bool|Logic $condition, mixed $first, mixed $second): mixed
}
}

if (!function_exists('reduced')) {
/**
* @param array<mixed>|Arr $arr
* @param callable $callback
* @param mixed $init
* @param bool $ensureInit
* @return mixed
* @throws Exception
*/
function reduced(array|Arr $arr, callable $callback, mixed $init, bool $ensureInit = false): mixed
{
return ensured_any(
array_reduce(
array: ensured_array($arr),
callback: $callback,
initial: $ensureInit ? (ensured_any($init)) : $init
)
);
}
}

if (!function_exists('at_key')) {
/**
* At key.
*
* @param string|int|float|Num|Txt $key Key to get value by
* @param Arr|array<mixed> $arr Array to get value from
* @param string|int|float|Num|Txt $key Key to get value by
* @param Arr|array<mixed> $arr Array to get value from
*
* @see AtKey
*/
Expand All @@ -162,8 +179,8 @@ function at_key(string|int|float|Num|Txt $key, array|Arr $arr): mixed
/**
* Key from array by element.
*
* @param string|int|Txt|Num|Any $value
* @param array<mixed>|Arr $arr
* @param string|int|Txt|Num|Any $value
* @param array<mixed>|Arr $arr
*
* @see AtValue
*/
Expand All @@ -187,7 +204,7 @@ function at_value(mixed $value, array|Arr $arr): string|int
/**
* First item.
*
* @param string|Any|Arr|array<mixed>|Txt $container Container to get first element from
* @param string|Any|Arr|array<mixed>|Txt $container Container to get first element from
*
* @see FirstOf
*/
Expand All @@ -211,7 +228,7 @@ function first_of(string|Any|Arr|array|Txt $container): mixed
/**
* Last of.
*
* @param string|array<mixed>|Txt|Arr|Any $container Container to get last element from
* @param string|array<mixed>|Txt|Arr|Any $container Container to get last element from
*
* @see LastOf
*/
Expand Down Expand Up @@ -244,9 +261,9 @@ function last_of(string|Any|Arr|array|Txt $container): mixed
/**
* Ctor.
*
* @param array<string|int|float|Txt|Num|Any>|Arr $keys
* @param array<mixed>|Arr $values
* @param bool $ensure
* @param array<string|int|float|Txt|Num|Any>|Arr $keys
* @param array<mixed>|Arr $values
* @param bool $ensure
* @return array<string|int,mixed>
*
* @see ArrCombined
Expand Down Expand Up @@ -277,14 +294,15 @@ function array_combined(array|Arr $keys, array|Arr $values, bool $ensure = false
if (!function_exists('array_cond')) {
/**
* Conditional array.
* Alias of @see array_fork
* Alias of @param bool|Logic $condition
*
* @param bool|Logic $condition
* @param Arr|array<mixed> $first
* @param array<mixed>|Arr $second
* @param Arr|array<mixed> $first
* @param array<mixed>|Arr $second
*
* @return array<mixed>
*
* @see array_fork
*
* @see ArrCond
*/
function array_cond(bool|Logic $condition, array|Arr $first, array|Arr $second): array
Expand All @@ -297,8 +315,8 @@ function array_cond(bool|Logic $condition, array|Arr $first, array|Arr $second):
/**
* Array exploded.
*
* @param non-empty-string|Txt $separator
* @param string|Txt $text
* @param non-empty-string|Txt $separator
* @param string|Txt $text
*
* @return array<mixed>
*
Expand All @@ -317,8 +335,8 @@ function array_exploded(string|Txt $separator, string|Txt $text): array
/**
* Array filtered.
*
* @param array<mixed>|Arr $arr
* @param callable $callback
* @param array<mixed>|Arr $arr
* @param callable $callback
*
* @return array<mixed>
* @see ArrFiltered
Expand All @@ -337,8 +355,8 @@ function array_filtered(array|Arr $arr, callable $callback): array
/**
* Flatten array.
*
* @param array<mixed>|Arr $arr
* @param int $deep
* @param array<mixed>|Arr $arr
* @param int $deep
*
* @return array<mixed>
*
Expand All @@ -347,10 +365,10 @@ function array_filtered(array|Arr $arr, callable $callback): array
function array_flatten(array|Arr $arr, int $deep = 1): array
{
/**
* @param array<mixed> $array
* @param array<mixed> $new
* @param int $currentDeep
* @param int $deep
* @param array<mixed> $array
* @param array<mixed> $new
* @param int $currentDeep
* @param int $deep
*
* @return array<mixed>
*/
Expand All @@ -374,26 +392,26 @@ function array_flatten(array|Arr $arr, int $deep = 1): array
/**
* Conditional array.
*
* @param bool|Logic $condition
* @param Arr|array<mixed> $first
* @param array<mixed>|Arr $second
* @param bool|Logic $condition
* @param Arr|array<mixed> $first
* @param array<mixed>|Arr $second
*
* @return array<mixed>
*
* @see ArrFork
*/
function array_fork(bool|Logic $condition, array|Arr $first, array|Arr $second): array
{
return (array) any_fork($condition, AnyOf::arr($first), AnyOf::arr($second));
return (array)any_fork($condition, AnyOf::arr($first), AnyOf::arr($second));
}
}

if (!function_exists('array_if')) {
/**
* Conditional array.
*
* @param bool|Logic $condition
* @param Arr|array<mixed> $arr
* @param bool|Logic $condition
* @param Arr|array<mixed> $arr
*
* @return array<mixed>
*
Expand All @@ -409,7 +427,7 @@ function array_if(bool|Logic $condition, array|Arr $arr): array
/**
* Array mapped.
*
* @param array<mixed>|Arr $arr
* @param array<mixed>|Arr $arr
* @return array<mixed>
*
* @return array<mixed>
Expand Down Expand Up @@ -445,7 +463,7 @@ function array_mapped(array|Arr $arr, callable $callback, bool $ensure = true):
/**
* Array merged.
*
* @param array<mixed>|Arr ...$items Items to be merged
* @param array<mixed>|Arr ...$items Items to be merged
*
* @return array<mixed>
*
Expand All @@ -466,8 +484,8 @@ function array_merged(array|Arr ...$items): array
/**
* Single element array.
*
* @param string|int|float|Txt|Num|Any $key
* @param mixed $value
* @param string|int|float|Txt|Num|Any $key
* @param mixed $value
*
* @return array<mixed>
*
Expand All @@ -483,8 +501,8 @@ function array_single(string|int|float|Txt|Num|Any $key, mixed $value): array
/**
* Sorted array.
*
* @param array<mixed>|Arr $arr
* @param callable|string|null $compare
* @param array<mixed>|Arr $arr
* @param callable|string|null $compare
*
* @return array<mixed>
*
Expand Down Expand Up @@ -512,13 +530,16 @@ function array_sorted(array|Arr $arr, callable|string|null $compare = null): arr
if (!function_exists('array_split')) {
/**
* Split array.
* Alias of @see array_exploded
* Alias of @see array_exploded()
*
* @param non-empty-string|Txt $separator
*
* @param non-empty-string|Txt $separator
* @param string|Txt $text
* @param string|Txt $text
*
* @return array<mixed>
*
* @see array_exploded
*
* @see ArrSplit
*/
function array_split(string|Txt $separator, string|Txt $text): array
Expand All @@ -531,9 +552,9 @@ function array_split(string|Txt $separator, string|Txt $text): array
/**
* Array with an element.
*
* @param array<mixed>|Arr $arr
* @param mixed $keyOrValue
* @param mixed $value
* @param array<mixed>|Arr $arr
* @param mixed $keyOrValue
* @param mixed $value
*
* @return array<mixed>
*
Expand All @@ -557,8 +578,8 @@ function array_with(array|Arr $arr, mixed $keyOrValue, mixed $value = null): arr
/**
* Array without an element.
*
* @param array<mixed>|Arr $arr
* @param string|int|Txt|Num ...$keys
* @param array<mixed>|Arr $arr
* @param string|int|Txt|Num ...$keys
*
* @return array<mixed>
*
Expand Down
Loading

0 comments on commit c6c5ae6

Please sign in to comment.