Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class JsonDiff
- {
- public static function compare($before, $after, $id_key, $not_important_keys = [])
- {
- $before = json_decode($before, true);
- $after = json_decode($after, true);
- $before = self::prepareArray($before, $id_key, $not_important_keys);
- $after = self::prepareArray($after, $id_key, $not_important_keys);
- $inserted = [];
- $deleted = [];
- $updated = [];
- $before_json = array_map('json_encode', $before);
- $after_json = array_map('json_encode', $after);
- $diff = array_diff_assoc($before_json, $after_json);
- foreach ($diff as $key => $item) {
- if (!isset($after[$key])) {
- $deleted[] = $before[$key];
- } else {
- $updated[$key] = $after[$key];
- }
- }
- $diff = array_diff_assoc($after_json, $before_json);
- foreach ($diff as $key => $item) {
- if (!isset($before[$key])) {
- $inserted[] = $after[$key];
- } elseif (!isset($updated[$key])) {
- $updated[$key] = $before[$key];
- }
- }
- $updated = array_values($updated);
- return json_encode(['inserted' => $inserted, 'updated' => $updated, 'deleted' => $deleted], true);
- }
- protected static function prepareArray($array, $id_key, $not_important_keys)
- {
- $return = [];
- foreach (array_keys($array) as $i) {
- foreach ($array[$i] as $key => $value) {
- if (!in_array($key, $not_important_keys)) {
- $return[$array[$i][$id_key]][$key] = $value;
- }
- }
- }
- return $return;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement