Получение элементов с одинаковым ключом, но разным значением в двух массивах PHP

#php #arrays

#php #массивы

Вопрос:

Итак, я получаю информацию из файла JSON и получаю один массив под названием «items» и передаю его в этот массив в PHP:

 "items": [
{
  "id": "2",
  "parent": null,
  "itemType": 0,
  "title": "Manuel Perez",
  "description": "Chief Executive Officer (CEO)",
  "phone": "(491) 183-55-45",
  "email": "ste.ballmer@name.com",
  "photo": "",
  "image": "demo/images/photos/m.png",
  "href": "showdetails.php?recordid=2",
  "isVisible": true
}
  

Затем я должен сравнить это с другим, который может содержать больше или меньше элементов, но я могу взять те элементы, которые изменяют размер массива. Но когда я хочу получить разницу, когда размер одинаков, а значение ключа отличается, когда я не могу заставить это работать.

Если во втором массиве в позиции 2 значение «ItemType» изменится на 1, я хочу получить что-то вроде этого:

 Array[2] - > "itemType": 1
  

И таким образом я могу узнать, изменилось ли что-то.

Ответ №1:

Предположим, у вас есть два массива $items1 и $ items2:

 $items1 = [
    "id" => "2",
    "itemType" => 0,
];

$items2 = [
    "parent" => null,
    "itemType" => 1,
];
  

Чтобы получить данные, которые добавлены или изменены в $items2 по сравнению с $ item1, вы можете использовать:

 array_diff_assoc($items2, $items1) // displays ['parent' => null, 'itemType' => 1]
  

Чтобы получить данные, которые добавлены или изменены в $items1 по сравнению с $ item2, вы можете использовать:

 array_diff_assoc($items1, $items2) // displays ['id' => "2", 'itemType' => 0]
  

Если вы хотите оба, вы можете объединить эти два массива и использовать их по своему усмотрению.

Ответ №2:

  1. Прежде всего, скройте ваши данные JSON в массив и преобразуйте элементы из обоих в $ jsonArray1 и $ jsonArray2 соответственно.

  2. Теперь отсортируйте оба ваших массива по ключу следующим образом ksort($jsonArray1); ksort($ jsonArray2);

  3. Теперь возьмем разницу обоих массивов $diffData = array_diff_assoc($jsonArray1, $ jsonArray2);

Вывод: $ diffData — это ваш вывод, надеюсь, это поможет!!