views:

177

answers:

2

Hello!

In PHP I have an array containing 20 elements or more. The keys have been assigned automatically. The values are random numbers from 1 to 50.

<?php
$randomList = array();
for ($i = 0; $i < 20; $i++) {
  $randomList[] = mt_rand(1, 50);
}
?>

Now I want to plot this array into a line chart. Unfortunately, I can only use 5 points for the graph. So I must reduce the number of elements in the array. But I don't want the look of the chart to be changed. So I need a function like this:

To make it clearer: When I want to reduce the size of an array from 6 elements to 3 elements, I can just sum up pairs of two elements each and take the average:

array(1, 8, 3, 6, 9, 5) => array(4.5, 6, 7)

My function should do this with variable sizes (for input and output).

I hope you can help me. Thanks in advance!

+3  A: 

To "shorten" an array $randomList to $X elements in the way that you've described, you could use array_chunk() and array_map() together like this:

$randomList = array_chunk($randomList, count($randomList) / $X);
$randomList = array_map('array_average', $randomList);

And define array_average() as:

function array_average($array) {
    return array_sum($array) / count($array);
}
yjerem
much nicer than mine
Evert
Perfect, thank you! :)
A: 
$randomList = array();
for ($i = 0; $i < 20; $i++) {
  $randomList[] = mt_rand(1, 50);
}  

$avgList=array();
for($i=0;$i<count($randomList)/2;$i++) {
   $avgList[] = ($randomList[$i*2] + $randomList[$i*2+1]) / 2
}
Evert
Thanks! But I don't want to halve the array sizes. The function should also be able to reduce an array from 12 elements to 4. Or - even more difficult - 17 elements to 5.