@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?
  • Вопрос задан
  • 342 просмотра
Пригласить эксперта
Ответы на вопрос 1
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Никак!
Превратите массив в "дерево" и ищите от "корня" до "листа".

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

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

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