Guest User

Untitled

a guest
Nov 19th, 2018
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.30 KB | None | 0 0
  1. $old_data = [
  2. ['name' => 'name1', 'value' => '123'],
  3. ['name' => 'name2', 'value' => '456'],
  4. ['name' => 'name3', 'value' => '789'],
  5. ];
  6.  
  7. $new_data = [
  8. ['name' => 'name1', 'value' => '321'], // value изменился
  9. ['name' => 'name2', 'value' => '456'],
  10. ['name' => 'name3', 'value' => '789'],
  11. ['name' => 'name4', 'value' => '999'], // новый элемент
  12. ['name' => 'name5', 'value' => '000'], // новый элемент
  13. ];
  14.  
  15. foreach ($new_data as $key => $value) {
  16. if(isset($old_data[$key])){
  17. $diff = array_diff($value, $old_data[$key]);
  18. } else {
  19. /// тут обрабатываем новые элементы, например добавляем их в результирующий массив diff
  20. }
  21. }
  22.  
  23. $diff = array_filter($new_data, function ($element) use (&$old_data) {
  24. return !in_array($element, $old_data);
  25. });
  26. var_dump($diff);
  27.  
  28. $diff = array_udiff( $old_data, $new_data, function ($a, $b) { return $a != $b; } );
  29. var_dump($diff);
  30.  
  31. $last_records = [
  32. //0=>
  33. ['url'=>'3'],
  34. //1=>
  35. ['url'=>'2'],
  36.  
  37. ];
  38. $new_records = [
  39. //0=>
  40. ['url'=>'1'],//новая запись
  41. //1=>
  42. ['url'=>'3'],//старая.
  43. //2=>
  44. ['url'=>'5'],//новая запись
  45. ];
  46. //сравниваем имеющиеся и новые массивы записей, к примеру, на основе поля 'url':
  47. $to_insert = [];
  48. $to_delete = [];
  49. $len_new = count($new_records);
  50. $len_last = count($last_records);
  51. for ($i=0; $i < $len_new; $i++) {
  52. $to_insert_counter = 0;
  53. for ($j=0; $j < $len_last; $j++) {
  54. if ($new_records[$i]['url'] !== $last_records[$j]['url']) {
  55. $to_insert_counter++;
  56. if ($to_insert_counter === $len_last)
  57. $to_insert[] = $new_records[$i];
  58. $to_delete_counter++;
  59. if ($to_delete_counter === $len_new)
  60. $to_delete[] = $last_records[$j];
  61. }
  62. }
  63. }
  64.  
  65. //Теперь имеем массивы к вставке новых записей $to_insert и удалению неактуальных $to_delete:
  66. to delete:Array
  67. (
  68. [0] => Array
  69. (
  70. [url] => 2
  71. )
  72.  
  73. )
  74.  
  75. to insert:Array
  76. (
  77. [0] => Array
  78. (
  79. [url] => 1
  80. )
  81.  
  82. [1] => Array
  83. (
  84. [url] => 5
  85. )
Add Comment
Please, Sign In to add comment