Допустим у нас есть:
Первый массив
array(
array(
'position' => 125632,
'balance' => 4
),
array(
'position' => 112332,
'balance' => 4
),
array(
'position' => 124442,
'balance' => 2
),
array(
'position' => 545632,
'balance' => 8
),
array(
'position' => 629652,
'balance' => 2
),
)
Второй массив
array(
array(
'position' => 125632,
'positionQuantity' => 2
),
array(
'position' => 112332,
'positionQuantity' => 1
),
array(
'position' => 124442,
'positionQuantity' => 1
),
array(
'position' => 545632,
'positionQuantity' => 5
),
array(
'position' => 629652,
'positionQuantity' => 1
),
)
И вот такой результат нам нужно получить
array(
array(
'position' => 125632,
'balance' => 2
),
array(
'position' => 112332,
'balance' => 3
),
array(
'position' => 124442,
'balance' => 1
),
array(
'position' => 545632,
'balance' => 3
),
array(
'position' => 629652,
'balance' => 1
),
)
Решение, которое первым пришло на ум
$newArray1 = array_column($array1, 'position', 'balance');
$newArray2 = array_column($array2, 'positionQuantity', 'position');
foreach ($array1 as $value) {
$returPositions[] = array(
'position' => $value['position'],
'balance' => $value['balance'] - $newArray2[$value['position']],
);
};
После был найден более лаконичный и быстрый вариант решения
$result = array_map(function($a,$b ){
$a['balance'] -= $b['positionQuantity'];
return $a;
}, $array1, $array2);