@Andriy231566

Как перебрать большой массив на 60000 строк?

public function synonimize(){
        $str = 'Упрямый и унылый уродец Андрюха упал и уличил Андриана, что он нихуя не работает';
        $words = $this->getWords();
        $result = $this->getRandomText($str, $words);
        dd($result);
    }

    protected function getRandomText($str, $words){
        mb_internal_encoding("UTF-8");
        $repl_array = $words;

        $keys = array_map(function($key){
            return '#'.$key.'#ui';
        }, $repl_array);

        foreach ($keys as $i=>$key) {
            $str = preg_replace_callback($key, function ($match) use ($repl_array, $i) {
                $syns = explode('|', $repl_array[$i]);
                array_splice($syns, array_search(mb_strtolower($match[0]), array_map('mb_strtolower', $syns)), 1);
                return $syns[rand(0, count($syns) - 1)];
            }, $str);
        }

        return $str;
    }

    protected function getWords(){
        $arr = [
            "Fora|фора",
            "Ford|форд",
            "General motors|дженерал моторс",
            "Google|гугл",
            "Hand|хэнд",
            "Hi-tech|хай-тек",
            "Homo sapiens|человек разумный",
            "Hyundai|хэндэ",
            "Ip-адрес|айпишник",
            "Ясного представления|четкого понятия",
            "Ясное понятие|четкое представление",
            "Ясное представление|четкое понятие",
            "Ясному представлению|четкому понятию",
             ......... 
             и еще много строк
        ];
        return $arr;
    }


на пк если запустить такой скрипт то комп очень долго думает
возможно например етот код залить на VPS сервак чтобы он быстро ответ давал, или что-то еще чтобы ускорить работу foreach?
  • Вопрос задан
  • 332 просмотра
Пригласить эксперта
Ответы на вопрос 1
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Никак!
Превратите массив в "дерево" и ищите от "корня" до "листа".

Чтобы ещё больше сократить время: у каждого узла (отдельной буквы) - указывайте максимальную глубину, чтобы сразу анализировать перспективу дальнейшего поиска (спуска) по данной "ветке дерева".
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы