How to find array mode in PHP

I have an array that has been sorted from low to high, which has more than 260 thousand values. I found out that the average (average) and median value of the array just need to be found in mode?

I cannot use any mathematical functions that PHP has, all this needs to be done manually.

I would like it to be only one value, which is a mode, but then there can be several values ​​that can be a mode. I should also be able to record the number of times the value is stored. For example, the number 51 appears 6 times, so I can print both values.

This is my code:

$amountRecords = 0; $totalValue = 0; $valueArray = array(); // reads in csv file $handle = fopen('Task1-DataForMeanMedianMode.csv', 'r'); // to skip the header names/values fgetcsv($handle); // creates array containing variables of csv file in ascending order while(($row = fgetcsv($handle, "\r")) != FALSE) { // if amountRecords equals 0 if($amountRecords == 0) { // adds value from csv to array $valueArray[] = $row[1]; } // else amountRecords does not equal 0 else { // if the value in array location before is greater than the current value from the csv file if($valueArray[$amountRecords - 1] > $row[1]) { // the current array location becomes the one in the location before $valueArray[] = $valueArray[$amountRecords - 1]; // add the value from the csv to the location before $valueArray[$amountRecords - 1] = $row[1]; } // if the value in the location before is not greater than the current value in the csv file else { // adds value from csv to array $valueArray[] = $row[1]; } } // calculates the total value of the values in csv file $totalValue = $totalValue + $row[1]; // calculates the number of values in the csv file $amountRecords++; } // calculate average value of payments $averageValue = $totalValue / $amountRecords; // limit integer to 2 decimal place $average = number_format($averageValue,2,'.',''); // finds middle value $middle = floor(($amountRecords / 2) - 1); // calculates the median value // if array size is even if($amountRecords % 2 == 0) { // calculates median $median = $valueArray[$middle]; } else // if array size is odd { // calculate low and high values $low = $valueArray[$middle]; $high = $valueArray[$middle + 1]; // calculates median $median = (($low + $high) / 2); } // works out mode // creates array count $count = array(); // for each value in the valueArray foreach( $valueArray as $value ) { if( isset( $count[$value] )) { $count[$value]++; } else { $count[$value] = 1; } } $mostCommon = ""; $iter = 0; foreach( $count as $k => $v ) { if( $v > $iter ) { $mostCommon = $k; $iter = $v; } } $modeArray = array( "mode" => $mostCommon , "count" => $iter ); 
+4
source share
2 answers

Numeric dialing mode is the number that occurs most often. You can do this with PHP using code similar to the following:

 $values = array_count_values($valueArray); $mode = array_search(max($values), $values); 
+19
source

Simple!

 $arr = array(4,6,7,1,4,7,4,7,1); $freq = array(); for($i=0; $i<count($arr); $i++) { if(isset($freq[$arr[$i]])==false) { $freq[$arr[$i]] = 1; } else { $freq[$arr[$i]]++; } } $maxs = array_keys($freq, max($freq)); for($i=0; $i<count($maxs); $i++) { echo $maxs[$i] . ' ' . $freq[$maxs[$i]]; echo '<br />'; } 
0
source

All Articles