Задать вопрос
  • Как можно соединить 2 массива в 1 без 2 forEach?

    Mike_Ro
    @Mike_Ro Куратор тега JavaScript
    Python, JS, WordPress, SEO, Bots, Adversting
    Объединение на основание совпадений свойств id объектов, используя Map и reduce, при пересечение одинаковых свойств, значение свойства будет заменено на значение из массива array2 (т.к. в тз не указано условие обработки одинаковых свойств):
    const array1 = [{
        'id': 3231,
        'stage': 3,
        'sort': 999,
    }];
    
    const array2 = [{
        'id': 3231,
        'status_client': 3,
        'status_date': '2024-11-22 16:18:58',
        'sort': 999,
    }];
    
    const map = new Map(array2.map((item) => [item.id, item]));
    
    const reduced = array1.reduce((acc, item) => {
        const _item = map.get(item.id);
    
        _item
            ? acc.push({..._item, ...item})
            : acc.push(item);
    
        return acc;
    }, []);
    
    console.log(reduced);
    
    // [
    //   {
    //     id: 3231,
    //     status_client: 3,
    //     status_date: '2024-11-22 16:18:58',
    //     sort: 999,
    //     stage: 3
    //   }
    // ]
    Ответ написан
    Комментировать
  • Как написать правило в nginx чтобы адрес типа http://localhost:8099/home/index/alex попадал в GET['url'] параметр?

    IvanU7n
    @IvanU7n
    nothing interesting here
    -      try_files $uri /$uri /index.php?$query_string;
    +      try_files $uri $uri/ /index.php?url=uri&$query_string;

    но сомнительная задумка, т.к. то же относительно легко вытаскивается через $_SERVER['REQUEST_URI']
    Ответ написан
    Комментировать
  • Как вывести правильный формат даты в JS?

    Elaryks
    @Elaryks
    В JS месяцы начинаются с 0, поэтому new Date (2001, 5, 5) — это июнь (06), это нужно учитывать. Кроме того, вы делаете проверку, если день меньше 10 и месяц меньше 10, при этом действие внутри блока бессмысленно — data далее не используется.

    Вариант с парсингом Date
    const getDateFormat = (date = new Date(2001, 4, 5), separator = '.') => {
      const days = String(date.getDate()).padStart(2, '0');
      const month = String(date.getMonth() + 1).padStart(2, '0');
      const year = date.getFullYear();
    
      return [days, month, year].join(separator);
    };

    Вариант с использованием Intl.DateTimeFormat
    const getDateFormat = (date = new Date(2001, 4, 5), separator = '.') => {
      const options = { day: '2-digit', month: '2-digit', year: 'numeric' };
      const formatter = new Intl.DateTimeFormat('ru-RU', options);
    
      return formatter.format(date).replace(/\./g, separator);
    };
    Ответ написан
    Комментировать
  • Как передать имя таблицы как параметр?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега PHP
    Никак.
    Ответ написан
    Комментировать
  • Как передать имя таблицы как параметр?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Но таблиц стало много и неопределённо много.

    Вижу два варианта.

    Первый - таблицы принципиально различаются. Просто запросы к ним внешне весьма похожи. В этом случае подобное объединение логически несвязанных запросов в один на основании всего лишь текстового подобия - как минимум бессмысленное, а по большому счёту и вредное, действие.

    Второй - таблицы имеют идентичную структуру. В таком случае возникает вполне обоснованный вопрос - а почему это несколько таблиц, а не одна? возможно, вместо отдельной таблицы просто с дополнительным полем, идентифицирующим группу.

    Отдельно стоИт вариант, который является подвариантом первого, с той лишь особенностью, что тексты запросов абсолютно совпадают. В этом случае возможным решением может служить хранимая процедура, куда передаётся в виде параметров и имя таблицы, и значение критерия, а внутри выбирается либо строится с помощью CASE текст запроса, выполняемый потом динамическим SQL.
    Поясню вариант "строится" - имя таблицы передаётся как параметр хранимой процедуры, там он сравнивается с набором предопределённых литералов, и уже этот предопределённый литерал, а не переданный параметр, участвует в построении текста запроса.

    На строго в рамках PDO - полностью согласен с предыдущим оратором. Никак.
    Ответ написан
    3 комментария
  • Как обновить PHP на сайте?

    @Refguser
    Решения для бизнеса: от создания ИМ до...
    Подскажите пожалуйста, как обновить PHP на сайте. Имея только доступ в wordpress-admin?

    никак.
    Или это можно будет сделать только из личного кабинета данного хостинга?

    Из панели управления хостингом.
    Ответ написан
    Комментировать
  • Как обновить PHP на сайте?

    SagePtr
    @SagePtr
    Еда - это святое
    Если сайт на шаред-хостинге, то только хостинг-провайдер может обновить на сервере программное обеспечение, в таком случае максимум можете обратиться в техподдержку с просьбой сделать это. Если на сервере установлены несколько версий PHP, можно в панели управления хостингом переключиться на любую уже установленную, но устанавливать новые не получится, не обладая на сервере административными правами.
    Если же сайт на VPS или собственном сервере - то вы сами себе администратор, обновлять в таком случае в зависимости от установленной операционной системы и дистрибутива (в случае использования Linux). Если установлена какая-нибудь панель управления - там эта функция может быть упрощена до нажатия на несколько кнопок.
    Ответ написан
    Комментировать
  • Как посчитать количество пересечений с помощью метода filter?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Решим задачу в общем виде - сделаем функцию, находящую количество совпадающих элементов у любых итерируемых объектов. Причём под совпадением будем понимать не обязательно непосредственное равенство (оставим это как вариант по умолчанию), а равенство некоторых производных значений. Так что к чёрту filter (а ещё Safari - говорят, яблочные уроды пока не реализовали поддержку методов итераторов; впрочем, сделать обычный for...of вместо reduce не проблема):

    function countIntersections(data1, data2, key = n => n) {
      const getKey = key instanceof Function ? key : n => n[key];
      const keys = new Set(Array.from(data2, getKey));
      return data1[Symbol.iterator]().reduce((acc, n) => acc + keys.has(getKey(n)), 0);
    }

    В вашем случае применять так: const result = countIntersections(newWord, glas);.

    Другие примеры использования:

    countIntersections(Array(7).keys(), Array(4).keys()) // 4
    countIntersections('abCdE', 'ACe', n => n.toLowerCase()) // 3
    countIntersections([ { id: 1 }, { id: 2 }, { id: 3 } ], [ { id: 3 } ], 'id') // 1
    Ответ написан
    Комментировать
  • Проблема с последовательным подключением свичей в чем мой косяк?

    @sinenkin Автор вопроса
    Проблема решена оказалось при подключении одного из свичей он брал адрес роутера как свой свич старый и управляемый оказался поменял адрес и все заработало
    Ответ написан
    Комментировать
  • Как в Битрикс создать join запрос к HLBlock?

    Потому-что в select нужно указать 'COST.<имя поля из COST>'. Например:

    $hlSelect = array('COST.ID', 'COST.UF_NAME');
    Ответ написан
    1 комментарий
  • Какая логика у перебора массива таким способом?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    i — это индекс массива — номер позиции в нём, считая от 0.
    arr[i]значение, которое лежит в массиве arr в позиции i.
    ещё проще
    Массив представьте как ряд одинаковых коробочек, юпронумерованных от 0 до N.
    В коробочках что-то лежит. Обратиться к коробку можно по имени массива и номеру ячейки: arr[4] например – это пятая по счету коробка, т.к. счет идёт от 0.


    Последовательность получается примерно такая:
    min = 12;

    i = 0; arr[i] = 12; arr[i] меньше min? НЕТ. идём дальше
    i = i + 1
    i = 1; arr[i] = 5; arr[i] меньше min? ДА. min становится 5; идём дальше
    i = i + 1
    i = 2; arr[i] = 8; arr[i] меньше min? НЕТ. идём дальше
    i = i + 1
    ...
    i = 4; arr[i] = 3; arr[i] меньше min? ДА. min становится 3; идём дальше
    ...
    for закончил работу, min так и остался равным 3
    Ответ написан
    Комментировать
  • Как добавить класс элементу до нужного по списку?

    Mike_Ro
    @Mike_Ro Куратор тега JavaScript
    Python, JS, WordPress, SEO, Bots, Adversting
    for (var i = 0; i < elements.length; i++) {
        if (i < items) {
            elements[i].classList.add("red");
        }
    }

    const items = 5;
    const elements = document.querySelectorAll(".elem");
    
    elements.forEach((el, i) => {
        if (i < items) {
            el.classList.add("red");
        }
    });
    Ответ написан
    1 комментарий
  • Какая утилита root доступа для Linux работает в консольном режиме без белого ip?

    SignFinder
    @SignFinder
    Wintel\Unix Engineer\DevOps
    Зависит от условий.
    Для linux есть коробочное решение для управления серверами - это ssh.
    А вот как вы к нему будете достукиваться - зависит от того, есть ли на 4G модемах публичные ip или нет.
    1. Если есть и они статические - просто открывается доступ в файрволе и ходите по адресам.
    2. Если есть и они динамические - настраиваете Dynamic DNS на каждом сервере, чтобы ходить по именам.
    3. Нет. Организовываете автоматическое подключение серверов куда-либо по VPN, чтобы была возможность заходить на них через адреса VPN сети.
    Ответ написан
    Комментировать
  • Как правильно перебрать вложенный массив и вывести результат?

    alsolovyev
    @alsolovyev
    ¯\_(ツ)_/¯ Enjoy life, Eat well & Laugh often
    <?php
    $goods = [
        'ASUS TUF' => ['Игровые ноутбуки', 'Ноутбуки для работы'],
        'ARDOR GAMING NEO' => ['Игровые ноутбуки', 'Ноутбуки для работы'],
        'MSI Katana' => ['Игровые ноутбуки', 'Ноутбуки для работы'],
        'HUAWEI MateBook D 16 2024 MCLF-X' => ['Ноутбуки для работы', 'Ультрабуки'],
        'Samsung Book3 Pro 360 NP960' => ['Ноутбуки для работы', 'Ультрабуки', 'Ноутбуки-трансформеры']
    ];
    
    echo "<ul>";
    foreach ($goods as $name => $categories) {
        echo "<li>$name: " . implode(", ", $categories) . "</li>";
    }
    echo "</ul>";
    ?>
    Ответ написан
    Комментировать
  • Как деплоить php приложение вместе с docker?

    Vamp
    @Vamp
    Это типичный вариант развёртывания приложения в докере. Единственный его минус - некоторое время даунтайма между моментом когда опустился старый контейнер и поднялся новый. Для решения этой проблемы есть разные техники. Например, blue-green deployment. Это когда есть два контейнера, условно называемые green и blue. И трафик льётся только на один. Скажем, на green. В момент деплоя обновляется blue контейнер и после того как он полностью будет готов - переключаем трафик на blue. В следующий раз деплой начнётся с обновления green.

    Переключение трафика делается разными способами. Самый безопасный - переписать конфиг nginx и релоаднуть его. Или менее безопасный, зато без необходимости править конфиг, - добавить оба конейнера в одну upstream группу и опустить green контейнер после обновления blue.

    Довольно муторное дело. Но в оркестраторах типа openshift и kubernetes такой деплоймент процесс уже встроен из коробки. Но вот сами оркестраторы довольно тяжелая штука. Для них нужен отдельный выделенный человек, который будет заниматься только ими. Так что я советую начинать присматриваться к оркестраторам только когда количество серваков перевалит за 50. С меньшим количеством это просто нерентабельно.

    Другой вариант развёртывания - контейнер с пхп поднят постоянно, но код проекта монтируется в контейнер через volume. Далее ci джоба по sftp заливает новый код в соседнюю папку и переключает симлинк. Симлинк переключается атомарно и контейнер сразу начинает работать с новым кодом. Ничего больше делать не надо. Я рекомендую такой подход когда на проекте менее 50 серверов.
    Ответ написан
    4 комментария
  • Почему компилятор выдает ошибку error: expected declaration or statement at end of input?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Пропущена закрывающая фигурная скобка в print_arr
    Ответ написан
    Комментировать
  • Как добавить новый домен на хостинг?

    borisdenis
    @borisdenis
    Ленив и вреден...
    На скриншоте есть запись CNAME, а где запись типа А для nuruddin.dev с ip адресом, на которую этот CNAME должен ссылаться?

    Ну и после смены NS серверов должно пройти пару суток, пока все днс сервера обновят свои записи
    Ответ написан
    Комментировать
  • Как установить старый проект на Windows?

    borisdenis
    @borisdenis
    Ленив и вреден...
    Верстаете в Windows, докер в виртуалке с Linux (или наоборот), всё работает.
    Ответ написан
    2 комментария
  • Как почистить базу sql?

    borisdenis
    @borisdenis
    Ленив и вреден...
    На серваке установлена Microsoft SQL Server 2014 с лимитом в 10гб

    Это у вас установлена бесплатная Express версия. Вам либо удалять старые данные из базы, либо повышать редакцию до платной версии.
    Если в программе нет штатной функции по очистке от старых данных - то вам нужно обращаться в техподдержку, так как это косяк проектировщиков, которые выбрали базу не продумав периодическую очистку, чтоб избежать сложившейся ситуации.
    Ответ написан
    Комментировать
  • Как эффективно перейти на c++ при опыте работе с php?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Посоветуйте, как можно было бы максимально безболезненно восполнить утраченные знания, а также наверстать упущенные новшества в языке?

    так это...
    Сейчас хочу попробовать реализовать научный проект.
    Собсно практика - лучший учитель, садитесь и пишите. Если базу уже знаете реализация не станет проблемой. По ходу решения текущих задач проекта познакомитесь со всеми нужными изменениями и практиками, сегодня на любой чих есть дока, туториал, видео и чатжпт. Двух зайцев двумя плюсами, так сказать...
    Ответ написан
    Комментировать