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 );
source share