From 0822589dbe0c02dd182cad4db8b0a622d165ea4c Mon Sep 17 00:00:00 2001 From: Oluwatobi Samue Omisakin Date: Wed, 13 May 2020 14:23:51 +0300 Subject: [PATCH 1/4] Add docblock-declared combine, shift, and slice methods --- src/Traits/ArrayPrefix.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/Traits/ArrayPrefix.php b/src/Traits/ArrayPrefix.php index 5602934..6b61f67 100644 --- a/src/Traits/ArrayPrefix.php +++ b/src/Traits/ArrayPrefix.php @@ -5,6 +5,14 @@ use Transprime\Arrayed\Exceptions\ArrayedException; use Transprime\Arrayed\Interfaces\ArrayedInterface; +/** + * Trait ArrayPrefix + * @package Transprime\Arrayed\Traits + * + * @method ArrayedInterface combine(array $values) + * @method mixed shift() + * @method ArrayedInterface slice(int $offset, int $length = null, bool $preserve_keys = false) + */ trait ArrayPrefix { public function changeKeyCase(int $case = null): ArrayedInterface From 816f69f99701be97ea81af2f244661fd65604e91 Mon Sep 17 00:00:00 2001 From: Oluwatobi Samue Omisakin Date: Mon, 18 May 2020 19:14:22 +0300 Subject: [PATCH 2/4] Declare doc block of non-implemented some array_* method --- src/Interfaces/ArrayPrefixInterface.php | 16 ++++++++++++++++ src/Interfaces/ArrayedInterface.php | 4 +--- src/Traits/ArrayPrefix.php | 3 --- 3 files changed, 17 insertions(+), 6 deletions(-) create mode 100644 src/Interfaces/ArrayPrefixInterface.php diff --git a/src/Interfaces/ArrayPrefixInterface.php b/src/Interfaces/ArrayPrefixInterface.php new file mode 100644 index 0000000..64a14b7 --- /dev/null +++ b/src/Interfaces/ArrayPrefixInterface.php @@ -0,0 +1,16 @@ + Date: Mon, 18 May 2020 20:40:46 +0300 Subject: [PATCH 3/4] Add diffKey, diffUassoc Implementation; combine, shift, and slice doc block methods --- src/Interfaces/ArrayPrefixInterface.php | 16 ---------- src/Interfaces/ArrayedInterface.php | 6 +++- src/Traits/ArrayPrefix.php | 13 ++++++++ tests/ArrayPrefixTraitTest.php | 40 ++++++++++++++++++++++++- 4 files changed, 57 insertions(+), 18 deletions(-) delete mode 100644 src/Interfaces/ArrayPrefixInterface.php diff --git a/src/Interfaces/ArrayPrefixInterface.php b/src/Interfaces/ArrayPrefixInterface.php deleted file mode 100644 index 64a14b7..0000000 --- a/src/Interfaces/ArrayPrefixInterface.php +++ /dev/null @@ -1,16 +0,0 @@ -setResult(array_reverse($this->getWorkableItem(), $preserve_keys)); } + public function diffUassoc(callable $key_compare_func, array $array2, array ...$_): ArrayedInterface + { + return $this->setResult(array_diff_uassoc($this->getWorkableItem(), $array2, ...$_, ...[$key_compare_func])); + } + + public function diffKey(array $array2, array ...$_): ArrayedInterface + { + return $this->setResult(array_diff_key($this->getWorkableItem(), $array2, ...$_)); + } + /** * Like php array_key_exists, this instead search if (one or more) keys exists in the array * diff --git a/tests/ArrayPrefixTraitTest.php b/tests/ArrayPrefixTraitTest.php index 6530401..7cc4001 100644 --- a/tests/ArrayPrefixTraitTest.php +++ b/tests/ArrayPrefixTraitTest.php @@ -17,7 +17,7 @@ public function testChangeKeyCase() public function testChunk() { $this->assertEquals( - [[1,2], [3,4]], + [[1, 2], [3, 4]], arrayed(1, 2, 3, 4)->chunk(2)->result() ); } @@ -77,6 +77,44 @@ public function testReverse() ); } + public function testDiffUassoc() + { + $first = ['a' => 'b', 'c' => 'd']; + $second = ['2' => 'b', 'c' => 'd']; + $third = ['2' => 'b', 'k' => 'd']; + $callback = function ($first, $second) { + return $first === $second; + }; + + $this->assertEquals( + array_diff_uassoc($first, $second, $callback), + arrayed($first)->diffUassoc($callback, $second)->result() + ); + + $this->assertEquals( + array_diff_uassoc($first, $second, $third, $callback), + arrayed($first)->diffUassoc($callback, $second, $third)->result() + ); + } + + public function testDiffKey() + { + $first = ['a' => 'b', 'c' => 'd']; + $second = ['2' => 'b', 'c' => 'd']; + $third = ['2' => 'b', 'k' => 'd', 'm' => 'a']; + $fourth = ['m' => 'b', 'h' => 'd', 's' => 'a']; + + $this->assertEquals( + array_diff_key($first, $second), + arrayed($first)->diffKey($second)->result() + ); + + $this->assertEquals( + array_diff_key($first, $second, $third, $fourth), + arrayed($first)->diffKey($second, $third, $fourth)->result() + ); + } + public function testUnImplementedArrayPrefixFunction() { // array_combine From d51ce6e0497a26b6c657f5f64cf114263f5e0045 Mon Sep 17 00:00:00 2001 From: Oluwatobi Samue Omisakin Date: Mon, 18 May 2020 20:45:45 +0300 Subject: [PATCH 4/4] [skip travis] document new methods in README.md --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 9a0d37c..27a178e 100644 --- a/README.md +++ b/README.md @@ -261,6 +261,9 @@ Arrayed::diff(array $array2, array ...$_): ArrayedInterface; Arrayed::reverse(bool $preserve_keys = false): ArrayedInterface; +Arrayed::diffUassoc(callable $key_compare_func, array $array2, array ...$_): ArrayedInterface; + +Arrayed::diffKey(array $array2, array ...$_): ArrayedInterface; ```