Слияние массивов в цикле
Если вы работаете в PhpStorm и у вас установлен плагин Php Inspections (EA Extended), то вы обязательно увидите следующую картину при использовании функции array_merge
в цикле:

Как видите, это не просто жёлтенький warning, а самая настоящая ошибка, выделенная красным. Что сразу портит благостную картину — красным подчёркивается и сам файл в дереве, что, конечно, не может не вызывать чувство дискомфорта и ощущение, что где-то накосячил. Конечно, эту инспекцию можно отключить, чтобы не раздражала. Но от этого проблема не исчезнет.
Если обратиться к описанию инспекции, то увидим такое объяснение:
Cлияние массивов в цикле происходит медленно и вызывает высокую загрузку ЦП.
Там же есть и решение. Оно заключается в следующем — нужно вынести вызов функции array_merge
за пределы цикла.
Я сделал пару тестов для того, чтобы убедиться в этом. В первом случае сливаем массивы в цикле.
$data = []; for ($i=1; $i <= 1000; $i++) { $data = array_merge($data, range(0,5)); } // ------------------ Время: 0,0272 s Память: 2.38 MB
Теперь сделаем как советует плагин — в цикле просто накапливаем данные, а после завершения цикла мёрджим их.
$data = []; for ($i=1; $i <= 1000; $i++) { $data[] = range(0,5); } $data = array_merge(...$data); // ------------------ Время: 0,0003 s Память: 2.52 MB
Думаю, всё достаточно наглядно. Время выполнения сократилось на 2 порядка. По нагрузке на CPU точных данных привести не могу. Но следуя логике (время работы сократилось) и убеждениям разработчиков плагина, она тоже должна значительно уменьшиться.
Вы должны авторизоваться, чтобы оставлять комментарии.
Комментарии ()