За последние 24 часа нас посетили 18976 программистов и 1613 роботов. Сейчас ищут 694 программиста ...

Расхождение многомерных ассоциативных массивов

Тема в разделе "PHP для новичков", создана пользователем tesla, 28 июн 2018.

  1. tesla

    tesla Активный пользователь

    С нами с:
    29 фев 2016
    Сообщения:
    34
    Симпатии:
    1
    Всем привет.
    Есть два массива. Один хранится в базе, второй прилетает через определенный промежуток ответом на запрос от API. Необходимо сравнивать массивы и выводить их расхождения. Например в базе лежит массив:
    PHP:
    1. $old_data =[
    2.     ['name'  =>'name1','value'=>'123'],
    3.     ['name'  =>'name2','value'=>'456'],
    4.     ['name'  =>'name3','value'=>'789'],
    5. ];
    Нам прилетает новый массив, в котором есть некоторые отличия:
    PHP:
    1. $new_data =[
    2.     ['name'  =>'name1','value'=>'321'],// value изменился
    3.     ['name'  =>'name2','value'=>'456'],
    4.     ['name'  =>'name3','value'=>'789'],
    5.     ['name'  =>'name4','value'=>'999'],// новый элемент
    6.     ['name'  =>'name5','value'=>'000'],// новый элемент
    7. ];
    Как бы
    PHP:
    1. $diff = array_filter($new_data, function ($element) use (&$old_data) {
    2.     return !in_array($element, $old_data);
    3. });
    4.  
    5. var_dump($diff);
    В вышеописанном примере работает - возвращает те значения, которые изменились или добавились. Не могу понять одну вещь, если массивы поменять местами - сделать что бы в новом массиве пришло меньше элементов чем в старом, то не работает - возвращает весь массив
     
  2. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    Как вариант - удалять всё навиг из таблицы, и писать новое, если не хочешь так - пиши цикл сравнения массивов, хотя, уверен что с помощью нативных функций можно что-то нарешать