Jump to content

Comparing 2 Arrays, and Updating to Match Dates


iwpg
Go to solution Solved by Zane,

Recommended Posts

Just dont know where to start, any guidance is greatly appreciated.

 

I have a charting program that can produce 2 array sets for different data and print it using the same time period/date. The problem that I have is there are some queries that produce missing dates (there is no data in this case). This shifts the array over into the wrong date. I added the dates to the array to compare, but I really don't know what to do with it. I thought about using array_merge, but Data1 needs to check Data2 values, and then backwards so the dates match (Year-Month). I know the array is a mess due to this, and re-writing it may be out of the question since there are thousands of records with similar info.

Data 1:Array ( [2012-04] => 14869 [2012-06] => 3214 [2012-07] => 5686 [2012-08] => 3937 [2012-09] => 4375 [2012-10] => 3049 [2012-11] => 2141 [2012-12] => 1685 [2013-01] => 1697 [2013-02] => 125 [2013-03] => 155 [2013-06] => 235 [2013-07] => 171 [2013-08] => 202 [2013-09] => 15 [2013-10] => 463 [2013-11] => 846 [2014-01] => 2617 ) Data 2:Array ( [2012-03] => 77250 [2012-04] => 66318 [2012-05] => 47291 [2012-06] => 54074 [2012-07] => 59331 [2012-08] => 65867 [2012-09] => 60705 [2012-10] => 67843 [2012-11] => 59960 [2012-12] => 58008 [2013-01] => 69416 [2013-02] => 60929 [2013-03] => 52830 [2013-04] => 47863 [2013-05] => 41873 [2013-06] => 37582 [2013-07] => 43731 [2013-08] => 45229 [2013-09] => 4486 [2013-10] => 45473 [2013-11] => 45706 [2013-12] => 54593 [2014-01] => 66230 ) 

 

A little more clarification, both arrays should have matching dates, if either is missing dates, the date should be taken from the other array and assigned 0 for it. This is what I would like the end result to be:

Data 1:Array ( [2012-03] => 0 [2012-04] => 14869 [2012-05] => 0 [2012-06] => 3214 [2012-07] => 5686 [2012-08] => 3937 [2012-09] => 4375 [2012-10] => 3049 [2012-11] => 2141 [2012-12] => 1685 [2013-01] => 1697 [2013-02] => 125 [2013-03] => 155 [2013-04] => 0 [2013-05] => 0 [2013-06] => 235 [2013-07] => 171 [2013-08] => 202 [2013-09] => 15 [2013-10] => 463 [2013-11] => 846 [2013-12] => 0 [2014-01] => 2617 ) Data 2:Array ( [2012-03] => 77250 [2012-04] => 66318 [2012-05] => 47291 [2012-06] => 54074 [2012-07] => 59331 [2012-08] => 65867 [2012-09] => 60705 [2012-10] => 67843 [2012-11] => 59960 [2012-12] => 58008 [2013-01] => 69416 [2013-02] => 60929 [2013-03] => 52830 [2013-04] => 47863 [2013-05] => 41873 [2013-06] => 37582 [2013-07] => 43731 [2013-08] => 45229 [2013-09] => 4486 [2013-10] => 45473 [2013-11] => 45706 [2013-12] => 54593 [2014-01] => 66230 ) 

Edited by Zane
Link to comment
Share on other sites

  • Solution

Using this 5 year old example, http://us3.php.net/manual/en/function.array-diff-key.php#82257 should help.

 

Using that array_unique_diff function, you should be able to have an array of all the unique and different keys.  Then you can iterate through those with a loop and add them to each array.with a value of 0.    If I understand you correctly.

function array_unique_diff ($array1, $array2) {
  return array_merge(array_diff_key($array1, $array2), array_diff_key($array2, $array1));
}

$a = array ( "one" => 1,  "two" => 2, "three" => 3 );
$b = array ( "one" => 56,  "two" => 2, "four" => 19 );

$missingKeys = array_unique_diff ( $a, $b );
foreach ( $missingKeys as $key=>$val ) {
     $a[$key] = 0;
     $b[$key] = 0;
}

That should change $a and $b to be

$a = array ( "one" => 1,  "two" => 2, "three" => 3, "four" => 0 );
$b = array ( "one" => 56,  "two" => 2, "three" => 0, "four" => 19 );
Edited by Zane
Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.