I needed to create an algorithm which will (efficiently) take an old array and a new array and give me back the changes between the two (which items added, which removed). It ha
PHP solution for associative arrays, splitting inserts/updates/deletes into separate arrays:
/**
* compute differences between associative arrays.
* the inserts, updates, deletes are returned
* in separate arrays. Note: To combine arrays
* safely preserving numeric keys, use $a + $b
* instead of array_merge($a, $b).
*
* Author: Monte Ohrt
* Version: 1.0
* Date: July 17th, 2014
*
* @param array $a1
* @param array $a2
* @return array ($inserts, $updates, $deletes)
*/
get_array_differences($a1, $a2) {
// get diffs forward and backward
$forward = array_diff_assoc($a1, $a2);
$backward = array_diff_assoc($a2, $a1);
// compute arrays
$inserts = array_diff_key($forward, $backward);
$updates = array_intersect_key($forward, $backward);
$deletes = array_diff_key($backward, $forward);
return array($inserts, $updates, $deletes);
}
https://gist.github.com/mohrt/f7ea4e2bf2ec8ba7542c