• Найти медиану двух отсортированных массивов?

    @Craftmoorg
    Вот решение на php. Как по мне, более понятное.
    Задача решается в три этапа:
    1. получить единый отсортированный массив
    2. определить какие индексы в массивы лежат по середине, путем определения четности/нечетности элементов массива
    3. вывести среднее арифметическое значение медианных индексов массива

    function findMedian($nums1, $nums2) {
            $medainValue = 0;
            $numsMerge = array_merge($nums1, $nums2);
            sort($numsMerge, SORT_NUMERIC); 
            $numsCount = count($numsMerge);
    
            if  ($numsCount % 2 == 0) {
                $firstMedianValue = $numsMerge[($numsCount - 1) / 2];
                $secondMedianValue = $numsMerge[($numsCount - 1) / 2 + 1];
                $medainValue = ($firstMedianValue + $secondMedianValue) / 2;
            }
            else {
                $medainValue = intval($numsMerge[($numsCount - 1) / 2]);
            }
            
            return $medainValue;
        }
    Ответ написан
  • Как в коробочной версии bitrix24 получить связанную задачу к сделке?

    @Craftmoorg
    Вот рабочий код.
    Для примера на событие OnBeforeCrmDealUpdate делаем проверку на наличие дел или задач у сделки. Если таковых не имеется, то делаем отмену изменения сделки с последующим уведомлением пользователя,
    public static function OnBeforeCrmDealUpdate(&$arFields)
        {
            // Если у сделки нет активности в виде дел или задач, то запрещаем ее изменять
            global $APPLICATION, $USER;
            $arActivities = [];
            $rsActivities = \CCrmActivity::GetList(
                ['ID' => 'DESC'],
                [
                    'BINDINGS' => [[
                        'OWNER_ID' => $arFields['ID'],
                        'OWNER_TYPE_ID' => 2 // \CCrmOwnerType::Deal не работает, потому что Битрикс
                    ]]
                ],
                false,
                false,
                ['PROVIDER_TYPE_ID', 'ASSOCIATED_ENTITY_ID'] // 'ASSOCIATED_ENTITY_ID'
            );
            while ($activity = $rsActivities->Fetch()) {
                if ($activity['PROVIDER_TYPE_ID'] == 'TODO' || $activity['PROVIDER_TYPE_ID'] == 'TASKS_TASK') {
                    $arActivities[] = $activity['ASSOCIATED_ENTITY_ID'];
                }
            }
            if (empty($arActivities)) {
                $message = 'Изменять или завершать сделку без дела или задачи нельзя!';
                if (\CModule::IncludeModule('im')) {
                    $arMessageFields = array(
                        "TO_USER_ID" => $USER->GetID(),
                        "FROM_USER_ID" => 0,
                        "NOTIFY_TYPE" => IM_NOTIFY_SYSTEM,
                        "NOTIFY_MODULE" => "im",
                        "NOTIFY_TAG" => "",
                        "NOTIFY_EVENT" => "default",
                        "NOTIFY_MESSAGE" => $message,
                    );
                    \CIMNotify::Add($arMessageFields);
                }
                $arFields['RESULT_MESSAGE'] = $message;
                $APPLICATION->ThrowException($message);
                return false;
            }
        }
    Ответ написан
    Комментировать
  • Как в Битрикс вывести множественное свойство через API?

    @Craftmoorg
    Внутри цикла ничего не нужно размещать, это не правильно. Есть метод CIBlockElement::GetPropertyValues для получения множественных свойств нескольких элементов. Для примера взял свойство Реквизиты.
    $iblockId = 1;
    $iblockCode = 'catalog';
    $productIds = [123, 1234, 1235];
    $propertyCode = 'CML2_TRAITS';
    // Получим ID свойства которое нам нужно по его символьному коду
    $propertyId = \CIBlockProperty::GetByID("CML2_TRAITS", false, $iblockCode)->Fetch()['ID'];
    // Далле уже получаем по ID свойства его значения. 
    $rsPropertyValues = \CIBlockElement::GetPropertyValues($iblockId, ['ID' => $productIds], true, ['ID' => $propertyId]);
    while ($arPropertyValue = $rsPropertyValues->Fetch()){
        foreach ($arPropertyValue['DESCRIPTION'][$propertyId] as $key => $value){
            if ($value == 'Вес'){
              // Ваш код...
            }
            if ($value == 'Объем'){
                // Ваш код...
            }
            if ($value == 'Штрихкод'){
                // Ваш код...
            }
        }
    }
    Ответ написан
    Комментировать