Advertisement
Guest User

Untitled

a guest
Jun 28th, 2017
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.66 KB | None | 0 0
  1. class JsonDiff
  2. {
  3. public static function compare($before, $after, $id_key, $not_important_keys = [])
  4. {
  5. $before = json_decode($before, true);
  6. $after = json_decode($after, true);
  7.  
  8. $before = self::prepareArray($before, $id_key, $not_important_keys);
  9. $after = self::prepareArray($after, $id_key, $not_important_keys);
  10.  
  11. $inserted = [];
  12. $deleted = [];
  13. $updated = [];
  14.  
  15. $before_json = array_map('json_encode', $before);
  16. $after_json = array_map('json_encode', $after);
  17.  
  18. $diff = array_diff_assoc($before_json, $after_json);
  19. foreach ($diff as $key => $item) {
  20. if (!isset($after[$key])) {
  21. $deleted[] = $before[$key];
  22. } else {
  23. $updated[$key] = $after[$key];
  24. }
  25. }
  26.  
  27. $diff = array_diff_assoc($after_json, $before_json);
  28. foreach ($diff as $key => $item) {
  29. if (!isset($before[$key])) {
  30. $inserted[] = $after[$key];
  31. } elseif (!isset($updated[$key])) {
  32. $updated[$key] = $before[$key];
  33. }
  34. }
  35.  
  36. $updated = array_values($updated);
  37.  
  38. return json_encode(['inserted' => $inserted, 'updated' => $updated, 'deleted' => $deleted], true);
  39. }
  40.  
  41. protected static function prepareArray($array, $id_key, $not_important_keys)
  42. {
  43. $return = [];
  44. foreach (array_keys($array) as $i) {
  45. foreach ($array[$i] as $key => $value) {
  46. if (!in_array($key, $not_important_keys)) {
  47. $return[$array[$i][$id_key]][$key] = $value;
  48. }
  49. }
  50. }
  51.  
  52. return $return;
  53. }
  54. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement