• Как оптимизировать этот php код?

    Stalker_RED
    @Stalker_RED
    Сравнить пересечение массивов можно так: https://www.php.net/manual/ru/function.array-diff.php

    Но возможно еще быстрее будет залить все в базу, во временную таблицу (load data infile) и потом добавить куда нужно используя insert ignore.
    1. создать временную таблицу (без индекса)
    2. load data infile ...
    3. создать индекс по id
    4. insert ignore into ... select (или on duplicate key update?)
    5. удалить временную

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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    я думаю, даже in_array будет быстрее чем это.
    Но по-хорошему надо сделать значения индексами
    тогда проверка будет проходить мгновенно
    $base = array_flip(array_column($base, 'ID'));
    foreach($data as $dates) {
        if (!isset($base[$dates['ID']])) {
                $itog[] = $dates;
        }
    }
    Ответ написан
    3 комментария
  • Как сделать автоматическую смену ключей Dadata?

    cr1gger
    @cr1gger
    Все дороги ведут в Рим — встретимся в Риме!
    Во-первых я не вижу в коде где определена переменная $maxKey
    Логика должна быть такая:
    Есть переменная
    $currentKey = 0; // в ней мы указываем индекс текущего ключа из массива

    Есть массив с ключами: $keys = [key,key,key];
    Есть функция:
    function changeKey(){
        $currentKey++;
        if ((count($keys) - 1) > $currentKey)
        {
            // завершаем работу скрипта, ключи кончились
        }
    }


    И два варианта на твой выбор как будешь определять когда менять ключ:
    1. Отлавливать ошибку, что ключ исчерпал дневной лимит и вызывать changeKey();
    2. Завести переменную которая будет считать кол-во сделанных запросов. И при достижении 10к запросов вызывать changeKey();

    Ключ получать так: $keys[$currentKey];
    Ответ написан