Задать вопрос
  • Как отфильтровать по вложенной коллекции laravel?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега PHP
    Красиво у каждого своё, плюс оно зависит от нюансов проекта.
    При условии, что мы не знаем заранее количество ключей lvlX, я бы написал так:
    // Если нужно полностью удалить элемент, внутри которого есть хотя бы один нулевой lvl
    array_filter(
        $a,
        function (array $item): bool {
            foreach ($item as $key => $value) {
                if (preg_match('~^lvl\d+$~', $key) === 1 && ($value['count'] === 0 || $value['min'] === 0 || $value['max'] === 0)) {
                    return false;
                }
            }
    
            return true;
        }
    );
    
    // Если нужно удалять только сами нулевые lvl
    array_map(
        function (array $item): array {
            return array_filter(
                $item,
                function ($value, string $key): bool {
                    return preg_match('~^lvl\d+$~', $key) !== 1 || ($value['count'] !== 0 && $value['min'] !== 0 && $value['max'] !== 0);
                },
                ARRAY_FILTER_USE_BOTH
            );
        },
        $a
    );

    Код нужно адаптировать в зависимости от того, где там у вас реально коллекция, а где массив, но это уже тривиальная задача.
    Ну и здесь предполагается, что структура каждого lvl фиксированная, то есть там всегда есть указанные ключи, чтобы не загромождать код проверками isset().

    Ну а самое красивое, на мой вкус, переделать структуру на более адекватную:
    [
        [
            'name' => 'Alex',
            'levels' => [
                ['index' => 1, 'count' => 5, 'min' => 12, 'max' => 5],
                ['index' => 2, 'count' => 0, 'min' => 5, 'max' => 7],
                ['index' => 3, 'count' => 18, 'min' => 0, 'max' => 8],
            ],
        ],
        [
            'name' => 'Igor',
            'levels' => [
                ['index' => 1, 'count' => 5, 'min' => 12, 'max' => 5],
                ['index' => 2, 'count' => 0, 'min' => 5, 'max' => 7],
                ['index' => 3, 'count' => 18, 'min' => 0, 'max' => 8],
            ],
        ]
    ];
    Тогда и код фильтрации будет простым и понятным.

    Если же ключи lvl1, lvl2 и lvl3 фиксированные, то, на мой вкус, лучше их захардкодить, это тоже значительно упростит жизнь в будущем, когда вы этот код откроете через пару лет и будете пытаться вспомнить что это за нагромождение из map, filter и регулярок.
    Ответ написан
    2 комментария
  • Как настроить ssh подключение для рута без пароля?

    akelsey
    @akelsey
    serg-novoch, непонятно зачем в рута лезть ключем из папки рут, логично что пользователь feanor не имеет доступа в /root на хосте где лежат ключи.

    логичнее конечно отказаться от подключения к руту, оно вроде как нафиг не нужно, но в крайнем случае если уж приспичило, скопировать ключ
    /root/.ssh/prod в /home/feanor/.ssh/prod_root
    дать ему права для пользователя feanor и поправить в config путь к ключу
    Ответ написан
    1 комментарий
  • Как передать большой файл по ssh без промежуточного хранения?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    tar -cz /home/target | sshpass -p 'pwd' ssh -p 23 username@server.com 'cat > /home/backups/destination.tar.gz'


    Все должно так работать. Если у вас ошибка от tar, то может это не stdout а stderr?
    Приведите текст что там не так. Файл в конечно счете правильный выходит?
    Ответ написан
    Комментировать
  • Почему ajax выполняется по очереди?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Вангую - на бэке PHP и сессии. Причём, открываются сессии в начале скрипта, а закрываются никогда, то есть по завершении скрипта.
    Тогда пока работает скрипт, файл сессии держится открытым и второй скрипт в той же сессии будет ждать освобождения файла. Файл сессии надо освобождать как можно раньше. session_start, считали нужные данные и сразу же session_write_close. Если надо что-то изменить в сессионных данных в процессе работы скрипта, то снова открыть сессию, записать изменения, закрыть.
    Ответ написан
    Комментировать
  • Почему не работает подсветка php в vs code?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    На первом скрине не PHP-код, а обычный текст, так как нет открывающего тэга <?php
    Цвет отдельных участков кода определяется цветовой темой, Settings -> Workbench -> Appearance -> Color Theme.
    Ответ написан
    Комментировать
  • Как правильно бэкапить в этом случае?

    leahch
    @leahch Куратор тега Linux
    3D специалист. Dолго, Dорого, Dерьмово.
    У Вас просто неправильный подход. Нужно не на сервер ходить за файлами, а сервер должен сам бекапить в нужное место. Тогда и проблемы с root не будет.
    Работал с тремя bareos (bakula), urbackup, borg - все достойны. В Вашем случае, наверное, borg - лучший выбор.
    Ответ написан
  • Почему докер не видит MySql?

    @Drno
    Ошибку то прочитайте.. он же пишет что Вы не используете пароль, хотя его задали.. там в коменте правильно сказали, надо указать -p еще
    Ответ написан
    Комментировать
  • Почему последовательный вызов работает, а в одну строку нет?

    grantur5707
    @grantur5707
    Full Stack Web Developer
    Метод getOfers() должен возвращать объект класса, а не true.

    class ProductAmount
    {
        function __construct($array = array()) { 
            ...
        }
    
        function getOfers($items = []) {
            ...
            return $this;
        }
    
        function getProfuctStore($inListStore = 'N') {
            ...
            return $this;
        }
    
        function setListStore($inListStore = 'Y') {
            ...
            return $this;
        }
    }


    $obj = new ProductAmount();
    $res = $obj->getOfers([229411])->getProfuctStore('Y')->setListStore('Y');
    Ответ написан
    Комментировать
  • Как понять-то хоть?

    @basili4-1982
    встраивать utm метки в урл. когда чел пришел с релкамы, добавлять метки и прокидывать их по всем переходам. пока он не уйдет на покупку.
    Ответ написан
    Комментировать
  • Можно ли использовать виртуальную машину для отображения программы на втором мониторе вместо покупки второго ПК для отдельного по?

    hint000
    @hint000
    у админа три руки
    В принципе можно на виртуальной машине. Но в частности зависит от особенностей прикладного ПО.
    Можно предположить, что абоненты только прикладывают карточку к сканеру и получают информацию на своём мониторе. Тогда нужно пробросить сканер (как USB-устройство) внутрь виртуальной машины.

    А ещё успех зависит от персональных особенностей сотрудника, который будет работать за этим ПК. Ну вы знаете, одному человеку можно показать, как здесь всё устроено и он поймёт, а другому показывай хоть каждый день, и он всё равно загонит курсор мышки на второй монитор и (глядя на первый монитор) будет говорить "ой, у меня снова мышка не работает". Если рассчитывать на текучку кадров или на низкий уровень сотрудника, то проще за копейки купить отдельный старенький системный блок.
    Ответ написан
    1 комментарий
  • Как можно укоротить код в foreach?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    /**
     * Переделать массив объектов, добавив префикс названию каждого из свойств
     * @param array<object> $srcArray исходный массив объектов
     * @param string $prefix строка, которую добавить перед названием каждого из свойств
     */
    $remap = fn (array $srcArray, string $prefix) => array_map(
        function ($obj) use ($prefix) {
            $keyValues = get_object_vars($obj);
            $keys = array_keys($keyValues);
            $values = array_values($keyValues);
            return (object) array_combine(
                array_map(fn ($key) => $prefix . $key, $keys),
                $values
            );
        },
        $srcArray
    );


    Test
    // Test
    $babySitters = [
        (object) ['a'=>'A1', 'b'=>'B-1'],
        (object) ['a'=>'A2', 'b'=>'B-2'],
        (object) ['a'=>'A3', 'b'=>'B-3'],
        (object) ['a'=>'A4', 'b'=>'B-4', 'c'=>'C4'],
    ];
    
    $result = $remap($babySitters, 'babysitter_');
    
    echo json_encode($result);


    Результат:
    [
      {
        "babysitter_a": "A1",
        "babysitter_b": "B-1"
      },
      {
        "babysitter_a": "A2",
        "babysitter_b": "B-2"
      },
      {
        "babysitter_a": "A3",
        "babysitter_b": "B-3"
      },
      {
        "babysitter_a": "A4",
        "babysitter_b": "B-4",
        "babysitter_c": "C4"
      }
    ]

    Ответ написан
    Комментировать
  • Как взламывают БД (MongoDB)?

    mikes
    @mikes
    нарисуйте схему взаимодействия компонентов приложения и что именно торчит от него в публичной части. будут понятны векторы атак.

    вангую что ломают вас не через субд как таковую (хотя держать ее с доступом извне странно) а через приложение. где то там есть возможность проводить инъекции и тд
    Ответ написан
    Комментировать
  • Какая сложность у этого алгоритма?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Цикл while же выполняется пропорционально количеству цифр в числе..
    Да. А количество цифр в числе C это ⌊log10C⌋ + 1.
    Элемент суммы с меньшей степенью (1) отбрасываем, округление вниз убираем, основание логарифма неважно, получаем logC
    Ответ написан
    6 комментариев
  • Как с помощью обработчика форм PHP отправлять сообщения о новой созданной заявки в беседу от бота telegram?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Форма отправляется на сервер, далее либо курлом вызывается второй скрипт, либо (если скрипт отправки в тг находится в рамках одного приложения) второй скрипт подключается инклудом после обработчика и обрабатывает форму своим способом.
    Ответ написан
    8 комментариев
  • Как получить данные из Promise?

    VoidVolker
    @VoidVolker Куратор тега JavaScript
    Dark side eye. А у нас печеньки! А у вас?
    Значит плохо читали. Прочитайте еще раз и выполните упражнения: https://learn.javascript.ru/promise
    async function one() {fetch('https://api.github.com/repos/javascript-tutorial/en.javascript.info/commits')
    .then(res => res.json()) 
    .then(data => { console.log(data) });
    }
    console.log(one())
    Ответ написан
    Комментировать
  • Как удалить из таблицы первые два символа, если они начинаются на 00?

    @maksam07
    UPDATE имя_таблицы
    SET имя_поля = SUBSTRING(имя_поля, 3)
    WHERE имя_поля LIKE '00%';


    за любые ошибки и потерю данных я ответственности не несу
    Ответ написан
    Комментировать
  • Есть ли возможность удобной миграции(синхронизации) сайта wp бесплатно?

    @Refguser
    Решения для бизнеса: от создания ИМ до...
    Нужна возможность выбора что я конкретно хочу засинхронить (только бд , только файлы и тд)

    Это дупликатор и в бесплатной версии может.
    Только нет смысла для файлов использовать дупликатор (и вообще какой-либо плагин). Их можно хоть по FTP "засинхронизировать".
    Ответ написан
    Комментировать
  • Почему в функции MYSQL при присвоении в переменную значения из таблицы не учитывается условие WHERE?

    @Uncleruc1
    Проблема заключается в том, что в вашей функции условие WHERE \orderid` = 871жестко зафиксировано, и оно всегда будет брать строку с этимorderid, игнорируя переданное значение orderid` в параметр функции.

    Чтобы учитывать переданное значение в параметр функции, необходимо использовать сам параметр orderid вместо фиксированного значения. Вот исправленный код функции:
    DROP FUNCTION IF EXISTS YourFunction;
    DELIMITER $$
    CREATE FUNCTION YourFunction (qty INT, orderid INT) RETURNS TEXT
    
    BEGIN
    DECLARE text_t TEXT;
    SELECT `sum` INTO text_t FROM t_order_price_type WHERE `orderid` = orderid LIMIT 1;
    RETURN text_t;
    END$$
    
    DELIMITER ;


    Однако, в данном виде WHERE \orderid` = orderid` не сработает так, как вы ожидаете, потому что MySQL может спутать поле таблицы с параметром функции. Чтобы избежать этой путаницы, лучше использовать псевдонимы или уникальные имена для параметров. Например:
    DROP FUNCTION IF EXISTS YourFunction;
    DELIMITER $$
    CREATE FUNCTION YourFunction (p_qty INT, p_orderid INT) RETURNS TEXT
    
    BEGIN
    DECLARE text_t TEXT;
    SELECT `sum` INTO text_t FROM t_order_price_type WHERE `orderid` = p_orderid LIMIT 1;
    RETURN text_t;
    END$$
    
    DELIMITER ;

    Здесь параметр функции называется p_orderid, что предотвращает конфликт имен между полем таблицы и параметром функции.
    Ответ написан
    2 комментария