Solved

Smoothing Data Array PHP

Posted on 2009-07-10
3
321 Views
Last Modified: 2013-12-13
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
Comment
Question by:nbcit
  • 2
3 Comments
 
LVL 9

Expert Comment

by:xBellox
ID: 24825652
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
 

Author Comment

by:nbcit
ID: 24825801
Mind posting a php solution :D. Also I used 2 for ease of explanation, it could be any whole number.
0
 
LVL 9

Accepted Solution

by:
xBellox earned 500 total points
ID: 24826032
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

ScreenConnect 6.0 Free Trial

Explore all the enhancements in one game-changing release, ScreenConnect 6.0, based on partner feedback. New features include a redesigned UI, app configurations and chat acknowledgement to improve customer engagement!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Be edit-table when I click the edit button (turn into inputs boxes) 7 31
paypal ipn to mysql 3 39
Places to advertise 6 35
does post require a form or curl to be post 4 34
A publishing tool, a Version Control System, or a Collaboration Platform! These can be some of the defining words for the two very famous web-hosting Git repositories: Bitbucket and Github. Git is widely used amongst the programmers and developers f…
It’s a strangely common occurrence that when you send someone their login details for a system, they can’t get in. This article will help you understand why it happens, and what you can do about it.
This tutorial will teach you the core code needed to finalize the addition of a watermark to your image. The viewer will use a small PHP class to learn and create a watermark.
Use Wufoo, an online form creation tool, to make powerful forms. Learn how to selectively show certain fields based on user input using rules to gather relevant information and data from your forms. The rules feature provides you with an opportunity…

803 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question