code: protected function addItemToResultsUsingKeyBy(&$results, BaseBitrixModel $object)
      {
          $item = $object->fields;
          if (!array_key_exists($this->keyBy, $item)) {
              throw new LogicException("Field {$this->keyBy} is not found in object");
          }
  
          $keyByValue = $item[$this->keyBy];
  
          if (!isset($results[$keyByValue])) {
              $results[$keyByValue] = $object;
          } else {
              $oldFields = $results[$keyByValue]->fields;
              foreach ($oldFields as $field => $oldValue) {
                  // пропускаем служебные поля.
                  if (in_array($field, ['_were_multiplied', 'PROPERTIES'])) {
                      continue;
                  }
  
                  $alreadyMultiplied = !empty($oldFields['_were_multiplied'][$field]);
  
                  // мультиплицируем только несовпадающие значения полей
                  $newValue = $item[$field];
                  if ($oldValue !== $newValue) {
                      // если еще не мультиплицировали поле, то его надо превратить в массив.
                      if (!$alreadyMultiplied) {
                          $oldFields[$field] = [
                              $oldFields[$field]
                          ];
                          $oldFields['_were_multiplied'][$field] = true;
                      }
  
                      // добавляем новое значению поле если такого еще нет.
                      if (empty($oldFields[$field]) || (is_array($oldFields[$field]) && !in_array($newValue, $oldFields[$field]))) {
                          $oldFields[$field][] = $newValue;
                      }
                  }
              }
  
              $results[$keyByValue]->fields = $oldFields;
          }
      }
docs: Adds $item to $results using keyBy value.
  
  @param $results
  @param BaseBitrixModel $object
  
  @return void