Я пытаюсь сравнить вложенные многомерные массивы по значению и ключу так что мой сценарий:Сравнение вложенных многомерных массивов
Мне нужно сравнить два вложенных многомерные массивы и найти разницу в терминах их значений по количеству и обновлять те количества, но и предметы, находящиеся в новом массиве, а не старый, например:
, если у меня есть следующие данные:
Первый массив:
Array (
[0] => Array ([name] => hey [qty] => 3)
[1] => Array ([name] => hello [qty] => 1)
[2] => Array ([name] => test [qty] => 1)
)
И еще один вложенный многомерный массив со следующими значениями:
Второй массив:
Array (
[0] => Array ([name] => hey [qty] => 5)
[1] => Array ([name] => hello [qty] => 5)
[2] => Array ([name] => PHP [qty] => 2)
)
Я пытаюсь достигнуть следующий вывод только с новыми элементами по ключу во втором массиве и обновления их значения основаны на различии между величинами первого и второго элементов массива, то есть:
Желаемый результат
Array (
[0] => Array ([name] => hey [qty] => 2)
[1] => Array ([name] => hello [qty] => 4)
[2] => Array ([name] => PHP [qty] => 2)
)
Я создаю разницу, используя следующее, но обратите внимание, как PHP не добавляется. Я не слишком уверен, как проверить его в моем внутреннем цикле, не добавляя его.
<?php
$items = [
'hey',
'hey',
'hey',
'hello',
'test'
];
$arr = array_count_values($items);
$oldItems = array();
foreach ($arr as $name => $qty) {
$oldItems[] = compact('name', 'qty');
}
$newItems = [
['name' => 'hey', 'qty' => 5],
['name' => 'hello', 'qty'=> 5],
['name' => 'PHP', 'qty' => 2]
];
$diff = [];
foreach($newItems as $newItem) {
foreach($oldItems as $oldItem) {
if ($newItem['name'] == $oldItem['name']) {
//get quantity
$qtyDiff = $newItem['qty'] - $oldItem['qty'];
if ($qtyDiff > 0) {
$diff[$newItem['name']] = $qtyDiff;
}
}
}
}
print_r($diff); die();
Мой токовый выход из этого сценария выглядит следующим образом:
Array (
[0] => Array ([name] => hey [qty] => 2)
[1] => Array ([name] => hello [qty] => 4)
)
любая помощь или обратная связь по улучшению. Благодаря!
Есть вы рассмотрели использование ['array_diff()'] (http://php.net/manual/en/function.array-diff.php)? –
Я определенно был бы заинтересован в использовании встроенных функций массива PHP, но не был на 100% уверен в том, как реализовать их при использовании вложенного многомерного массива, и его невозможно сгладить (в моем использовании). – liamjnorman
В документах есть полный пример. –