patternphpMinor
Finding the average, the five smallest, and the five largest numbers in an array
Viewed 0 times
smallestthefivearraynumbersaveragelargestfindingand
Problem
I am going though some PHP arrays exercises on w3resource. I have just completed the following:
Recorded temperatures :
Here is my code:
And here is its output:
(I paid no attention to fixing the commas at the end of each part of the output, for now.)
My questions are:
-
Is this an appropriate use of
-
Is
- Write a PHP script to calculate and display average temperature, five lowest and highest temperatures.
Recorded temperatures :
78, 60, 62, 68, 71, 68, 73, 85, 66, 64, 76, 63, 75, 76, 73, 68, 62, 73, 72, 65, 74, 62, 62, 65, 64, 68, 73, 75, 79, 73Here is my code:
";
$temperatures = array(78, 60, 62, 68, 71, 68, 73, 85, 66, 64, 76, 63, 75, 76, 73, 68, 62, 73, 72, 65, 74, 62, 62, 65, 64, 68, 73, 75, 79, 73);
function listvalues($value)
{
echo "$value, ";
}
function printAverage($array)
{
$total = 0;
foreach($array as $element)
{
$total += $element;
}
echo number_format($total / count($array), 1);
}
echo "Recorded temperatures : ";
array_walk($temperatures, "listvalues");
echo "";
echo "Average Temperature is : ";
printAverage($temperatures);
echo "";
//sort the temperatures in ascending order for both of the following lists.
sort($temperatures);
//print the first 5 values
echo "List of five lowest temperatures : ";
for($i = 0; $i ";
//print the last 5 values
echo "List of five highest temperatures : ";
for($i = count($temperatures) - 5; $i ";
echo "";
?>And here is its output:
Recorded temperatures : 78, 60, 62, 68, 71, 68, 73, 85, 66, 64, 76, 63, 75, 76, 73, 68, 62, 73, 72, 65, 74, 62, 62, 65, 64, 68, 73, 75, 79, 73,
Average Temperature is : 69.8
List of seven lowest temperatures : 60, 62, 62, 62, 62,
List of seven highest temperatures : 76, 76, 78, 79, 85,
(I paid no attention to fixing the commas at the end of each part of the output, for now.)
My questions are:
-
Is this an appropriate use of
array_walk()? Is it more appropriate to use a foreach() loop?-
Is
($total / count($array) the easiest way to find the average of an array, and is Solution
There are a number of built-in functions in PHP that would make your code shorter and more direct.
The first is
The second is
The third is
Putting it all together, we get the following:
The first is
implode. implode takes and optional glue string and an array of values, and joins them together into a single string. So for implode(", ", array(1, "a", 3)), it would return "1, a, 3". This avoids the need to loop over the elements of an array to print them with a separator, and to catch the last case where there should be no separator.The second is
array_sum. This, as its name suggests, takes an array and sums the values. This also avoids an explicit loop.The third is
array_slice. This function will take an array, and return a portion of it based on the given parameters. It can even be used to index in reverse with a negative offset.Putting it all together, we get the following:
";
$temperatures = array(78, 60, 62, 68, 71, 68, 73, 85, 66, 64, 76, 63, 75, 76, 73, 68, 62, 73, 72, 65, 74, 62, 62, 65, 64, 68, 73, 75, 79, 73);
echo "Recorded temperatures : ";
echo implode(", ", $temperatures);
echo "";
echo "Average Temperature is : ";
echo number_format(array_sum($temperatures) / count($temperatures), 1);
echo "";
//sort the temperatures in ascending order for both of the following lists.
sort($temperatures);
//print the first 5 values
echo "List of five lowest temperatures : ";
echo implode(", ", array_slice($temperatures, 0, 5));
echo "";
//print the last 5 values
echo "List of five highest temperatures : ";
echo implode(", ", array_slice($temperatures, -5, 5));
echo "";
echo "";
?>Code Snippets
<?php
echo "<pre>";
$temperatures = array(78, 60, 62, 68, 71, 68, 73, 85, 66, 64, 76, 63, 75, 76, 73, 68, 62, 73, 72, 65, 74, 62, 62, 65, 64, 68, 73, 75, 79, 73);
echo "Recorded temperatures : ";
echo implode(", ", $temperatures);
echo "<br>";
echo "Average Temperature is : ";
echo number_format(array_sum($temperatures) / count($temperatures), 1);
echo "<br>";
//sort the temperatures in ascending order for both of the following lists.
sort($temperatures);
//print the first 5 values
echo "List of five lowest temperatures : ";
echo implode(", ", array_slice($temperatures, 0, 5));
echo "<br>";
//print the last 5 values
echo "List of five highest temperatures : ";
echo implode(", ", array_slice($temperatures, -5, 5));
echo "<br>";
echo "</pre>";
?>Context
StackExchange Code Review Q#91959, answer score: 8
Revisions (0)
No revisions yet.