Предположим, у вас есть коллекция с именем $payments
:
$payment = new StdClass;
$payment->date_payment = '2018-01-01';
$payment->total_payment = 19761.62;
$payments = collect([
$payment
]);
и другая коллекция с именем $expenses
:
$expense1 = new StdClass();
$expense1->date_payment = '2018-01-29';
$expense1->total_charges = 5184.4399862289;
$expense2 = new StdClass();
$expense2->date_payment = '2017-09-04';
$expense2->total_charges = 0;
$expenses = collect([
$expense1, $expense2
]);
Для извлечения элементов, имеющих одинаковые ключи в обоихсбор, вы можете сделать это с помощью intersectByKeys
:
$payments->intersectByKeys($expenses);
Это позволит получить все платежи, которые имеют общий ключ со сбором расходов.
Теперь, чтобы обновить значенияколлекция, вы можете использовать функцию transform
:
$payments->transform(function ($payment, $index) use ($expenses) {
$expense = $expenses->get($index);
$payment->date_payment = $expense->date_payment;
$payment->total_charges = $expense->total_charges;
return $payment;
});
Теперь, если вы объедините их вместе:
$payments->intersectByKeys($expenses)->transform(function ($payment, $index) use ($expenses) {
$expense = $expenses->get($index);
$payment->date_payment = $expense->date_payment;
$payment->total_charges = $expense->total_charges;
return $payment;
});
Выход
Collection {#277 ▼
#items: array:1 [▼
0 => {#272 ▼
+"date_payment": "2018-01-29"
+"total_payment": 19761.62
+"total_charges": 5184.4399862289
}
]
}
Для болееинформация: