Smoothing Data Array PHP

Posted on 2009-07-10
Last Modified: 2013-12-13
I have an array:
    [1] => 25
    [2] => 50
    [3] => 25
I would like to make it into:
    [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)
Question by:nbcit
  • 2

Expert Comment

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];
	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);

Open in new window


Author Comment

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

Accepted Solution

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:


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];
	return $retArr;	
// Testing
$arrTest1 = array(10,15,15,25,25,20);
$arrTest2 = array(10,15,14,10,20,10,22,25,20);

Open in new window


Featured Post

Free Tool: SSL Checker

Scans your site and returns information about your SSL implementation and certificate. Helpful for debugging and validating your SSL configuration.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

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

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…
Introduction This article is intended for those who are new to PHP error handling (  It addresses one of the most common problems that plague beginning PHP develop…
Learn how to match and substitute tagged data using PHP regular expressions. Demonstrated on Windows 7, but also applies to other operating systems. Demonstrated technique applies to PHP (all versions) and Firefox, but very similar techniques will w…
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.

679 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