Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 363
  • Last Modified:

Smoothing Data Array PHP

I have an array:
Array
(
    [1] => 25
    [2] => 50
    [3] => 25
)
I would like to make it into:
Array
(
    [1] => 50
    [2] => 50
)
To do this I split the middle value between 1 and 3. This is the simplest example, where the split is 50,50. I would like to be able to take a 15 element array down to 6 elements.

Any ideas?


Additional Examples

[10, 15, 20, 25] Reduced to two elements: 25(10 + 15),45(20 + 25)
[10, 10, 10, 10, 11] Reduced to two elements: 25(10 + 10 + (10/2)),26((10/2) + 10 + 11)
0
nbcit
Asked:
nbcit
  • 2
1 Solution
 
xBelloxCommented:
This should work just fine:

<script language="javascript">
function makeItTwo(arr) {
	var retArr = new Array(0, 0); // return array
	if ((arr.length % 2)){
		var middle = Math.floor(arr.length/2); // middle element
		retArr[0] += arr[middle]/2; // add value
		retArr[1] += arr[middle]/2; // add value
	};
	last = arr.length-1; // Last element
	for (i=0; i<last; i++) { // first and last, first+1 and last-1...first+n and last-n
		retArr[0] += arr[i];
		retArr[1] += arr[last];
		last--;
	};
	return retArr;	
};
 
// Testing
var arrTest1 = new Array(10,15,15,25,25,20);
var arrTest2 = new Array(10,15,14,10,20,10,22,25,20);
alert(makeItTwo(arrTest1));
alert(makeItTwo(arrTest2));
</script>

Open in new window

0
 
nbcitAuthor Commented:
Mind posting a php solution :D. Also I used 2 for ease of explanation, it could be any whole number.
0
 
xBelloxCommented:
Sorry, I didn't see that is in php, I had done various JavaScript function here today :)

Please tell how this array should result with 3 and 5 elements:

array(10,15,14,10,20,10,22,25,20);



In advance for two elements in php will be something like this:

<?
function makeIt($arr) {
	$retArr = array_fill(0, 2, 0); // return array
	
	if ((count($arr) & 1)){
		$middle = floor(count($arr)/2); // middle element
		$retArr[0] += $arr[$middle]/2; // add value
		$retArr[1] += $arr[$middle]/2; // add value
	};
	$last = count($arr)-1; // Last element
	for ($i=0; $i<$last; $i++) { // first and last, first+1 and last-1...first+n and last-n
		$retArr[0] += $arr[$i];
		$retArr[1] += $arr[$last];
		$last--;
	};
	return $retArr;	
};
 
// Testing
$arrTest1 = array(10,15,15,25,25,20);
$arrTest2 = array(10,15,14,10,20,10,22,25,20);
print_r(makeIt($arrTest1));
print_r(makeIt($arrTest2));
 
?>

Open in new window

0

Featured Post

Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now