Skip to content

Commit 986d136

Browse files
authored
Merge pull request #117 from salehhashemi1992/mode-function-multiple-return
Enhance mode() Function to Return Multiple Modes
2 parents 62dc243 + 50f436e commit 986d136

File tree

2 files changed

+13
-10
lines changed

2 files changed

+13
-10
lines changed

Maths/Mode.php

+8-7
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,21 @@
11
<?php
22
/**
33
* This function calculates
4-
* The mode value of
4+
* the mode value(s) of
55
* numbers provided
6-
*
6+
*
77
* @param decimal $numbers A variable sized number input
8-
* @return decimal $mode Mode of provided numbers
8+
* @return array $modes Array of mode(s) of provided numbers
9+
* @throws \Exception
910
*/
1011
function mode(...$numbers)
1112
{
1213
if (empty($numbers)) {
13-
throw new \Exception('Please pass values to find mean value');
14+
throw new \Exception('Please pass values to find the mode');
1415
}
1516

16-
$values = array_count_values($numbers);
17-
$mode = array_search(max($values), $values);
17+
$values = array_count_values($numbers);
18+
$maxCount = max($values);
1819

19-
return $mode;
20+
return array_keys($values, $maxCount, true);
2021
}

tests/Maths/MathsTest.php

+5-3
Original file line numberDiff line numberDiff line change
@@ -141,8 +141,10 @@ public function testMedian()
141141

142142
public function testMode()
143143
{
144-
mode(4,2,7,9,2,9,0,4,2);
145-
mode(21,72,40,21,0,99,21,99,0,40);
146-
mode(3,3,3,3);
144+
$this->assertEquals([3], mode(1, 2, 3, 3, 4, 5));
145+
$this->assertEquals([5, 6], mode(5, 5, 6, 6, 7));
146+
$this->assertEquals([1, 2, 3, 4, 5], mode(1, 2, 3, 4, 5));
147+
$this->assertEquals([2, 3, 4], mode(2, 2, 3, 3, 4, 4));
147148
}
149+
148150
}

0 commit comments

Comments
 (0)