Solved

Smoothing Data Array PHP

Posted on 2009-07-10
3
315 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

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

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

Suggested Solutions

What is Node.js? Node.js is a server side scripting language much like PHP or ASP but is used to implement the complete package of HTTP webserver and application framework. The difference is that Node.js’s execution engine is asynchronous and event…
These days socially coordinated efforts have turned into a critical requirement for enterprises.
This video teaches users how to migrate an existing Wordpress website to a new domain.
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.

929 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

Need Help in Real-Time?

Connect with top rated Experts

14 Experts available now in Live!

Get 1:1 Help Now