purchaseUnits($from->purchaseUnits(), $to->purchaseUnits()); return new PatchCollection(...$allPatches); } /** * @param PurchaseUnit[] $from * @param PurchaseUnit[] $to * @return Patch[] */ private function purchaseUnits(array $from, array $to) : array { $patches = []; $path = '/purchase_units'; foreach ($to as $purchaseUnitTo) { $needsUpdate = ! count( array_filter( $from, function (PurchaseUnit $unit) use ($purchaseUnitTo) : bool { //phpcs:disable WordPress.PHP.StrictComparisons.LooseComparison // Loose comparison needed to compare two objects. return $unit == $purchaseUnitTo; //phpcs:enable WordPress.PHP.StrictComparisons.LooseComparison } ) ); if (!$needsUpdate) { continue; } $purchaseUnitFrom = current(array_filter( $from, function (PurchaseUnit $unit) use ($purchaseUnitTo) : bool { return $purchaseUnitTo->referenceId() === $unit->referenceId(); } )); $operation = $purchaseUnitFrom ? 'replace' : 'add'; $value = $purchaseUnitTo->toArray(); $patches[] = new Patch( $operation, $path . "/@reference_id=='" . $purchaseUnitTo->referenceId() . "'", $value ); } return $patches; } }