Finishing up an open source Domain Registrar plugin and having a few troubles with determining when a change has been made.
$saved = array(
array( 'domain' => 'mydomain.com', 'record' => 'A', 'value' => '8.8.8.8' ),
array( 'domain' => 'mydomain.com', 'record' => 'NS', 'value' => 'ns1.mydomain.com' )
);
$new = array(
array( 'domain' => 'mydomain.com', 'record' => 'A', 'value' => '4.4.4.4' ),
array( 'domain' => 'mydomain.com', 'record' => 'NS', 'value' => 'ns1.mydomain.com' ),
array( 'domain' => 'sub.mydomain.com', 'record' => 'A', 'value' => '1.2.3.4' ),
);
$saved
is the values already saved at the domain registrar, and is only being used for comparison.
$new
is the array returned from application that processed the form on the website.
I need to somehow only return arrays that have values that were updated or that do not already exist/match from $saved
.
Basically the return array i'm looking for would be:
array(
array( 'domain' => 'mydomain.com', 'record' => 'A', 'value' => '4.4.4.4' )
array( 'domain' => 'sub.mydomain.com', 'record' => 'A', 'value' => '1.2.3.4' ),
);
Because in $saved
the value
was updated from 8.8.8.8
to 4.4.4.4
, and the sub.mydomain.com
did not match any array from $saved
meaning it's a new entry.
Using array_intersect
I was able to get it to return the array that had it's values updated, but unfortunately it still includes the arrays that matched as well. If I could somehow have those removed that would be exactly what I need.
Here's a demo: http://glot.io/php/529b0c6d2fd16fe221f86bb521155384
Maybe use array_uintersect
with a callback to check if the arrays match and unset? Looking for some help as i'm stuck on this now.
Thanks!!
$diff = array_diff($new, array_intersect($new, $saved));
? – Jimmy Sawczuk Sep 23 '14 at 2:04