From c7d706943c6b7bf2a0a9d7bc01ebaee5556dc784 Mon Sep 17 00:00:00 2001 From: Thorben Grahlmann Date: Wed, 2 May 2018 16:38:40 +0200 Subject: [PATCH 1/2] filter out null in avg method --- src/Illuminate/Support/Collection.php | 12 ++++++++++-- tests/Support/SupportCollectionTest.php | 7 +++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/Illuminate/Support/Collection.php b/src/Illuminate/Support/Collection.php index d89737e62d22..1c63c712a47f 100644 --- a/src/Illuminate/Support/Collection.php +++ b/src/Illuminate/Support/Collection.php @@ -122,8 +122,16 @@ public function all() */ public function avg($callback = null) { - if ($count = $this->count()) { - return $this->sum($callback) / $count; + $callback = $this->valueRetriever($callback); + + $items = $this->map(function ($value) use ($callback) { + return $callback($value); + })->filter(function ($value) { + return ! is_null($value); + }); + + if ($count = $items->count()) { + return $items->sum() / $count; } } diff --git a/tests/Support/SupportCollectionTest.php b/tests/Support/SupportCollectionTest.php index 3601dca9c062..e503a3de0be7 100755 --- a/tests/Support/SupportCollectionTest.php +++ b/tests/Support/SupportCollectionTest.php @@ -2098,6 +2098,13 @@ public function testGettingAvgItemsFromCollection() $this->assertEquals(15, $c->avg('foo')); $this->assertEquals(15, $c->avg->foo); + $c = new Collection([(object) ['foo' => 10], (object) ['foo' => 20], (object) ['foo' => null]]); + $this->assertEquals(15, $c->avg(function ($item) { + return $item->foo; + })); + $this->assertEquals(15, $c->avg('foo')); + $this->assertEquals(15, $c->avg->foo); + $c = new Collection([['foo' => 10], ['foo' => 20]]); $this->assertEquals(15, $c->avg('foo')); $this->assertEquals(15, $c->avg->foo); From d71644dedb21a02a7857278c55c46de97f3a5be0 Mon Sep 17 00:00:00 2001 From: Thorben Grahlmann Date: Wed, 2 May 2018 16:44:23 +0200 Subject: [PATCH 2/2] styleci fix --- src/Illuminate/Support/Collection.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Illuminate/Support/Collection.php b/src/Illuminate/Support/Collection.php index 1c63c712a47f..387b35b453e4 100644 --- a/src/Illuminate/Support/Collection.php +++ b/src/Illuminate/Support/Collection.php @@ -123,13 +123,13 @@ public function all() public function avg($callback = null) { $callback = $this->valueRetriever($callback); - + $items = $this->map(function ($value) use ($callback) { return $callback($value); })->filter(function ($value) { return ! is_null($value); }); - + if ($count = $items->count()) { return $items->sum() / $count; }