@Shimpanze

Array_unique на пятидесяти тысячах элементов, намертво вешает систему. Я написал замену. Прошу совета у опытных программистов?

Здравствуйте!

У меня есть массив строчных элементов, в котором 50 000 элементов, из них необходимо оставить уникальные.

При попытке использовать array_unique, на этой функции вешается сервер и ничего не происходит часами...

Я написал свою функцию. Но, насколько она оптимальна?

Прошу совета, есть ли алгоритм быстрее?

$part = 1000;
$pause = 10; // сек.

foreach ( $items as $im )
{
    /**
     * Счётчик, чтобы не перегружать ресурсы сервера.
     * Каждые $part элементов, делать перерыв $pause.
     */
    $j ?? $j = 1;
    /** Строка, чтобы знать, что что-то вообще происходит. */
    echo 'Обработка элемента ', $im, PHP_EOL;
    if ( $j++ % $part === 0 )
    {
        echo 'Ожидание ', $pause, ' сек.', PHP_EOL;
        sleep( $pause );
    }

    $keys_match = array_keys( $items, $im );
    $keys_to_del = array_slice( $keys_match, 1 );

    foreach ( $keys_to_del as $key_to_del )
    {
        unset( $items[$key_to_del] );
    }
}
  • Вопрос задан
  • 148 просмотров
Пригласить эксперта
Ответы на вопрос 1
smilingcheater
@smilingcheater
Вы пробовали загуглить "php array_unique performance"? Вы не первый, кто с этим столкнулся, и решения описаны много раз.

Самое простое, если не вдаваться в логику вашего кода - заменить ваш код на array_keys(array_flip($items));
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы