@Alpha12

Как работать с большими массивами?

Добрый день, интересует как правильно разбить большой массив на под масивы, или как сделать правильно, скажем формирование файла, на основании одного большого массива который формируется на основании 30 тыс товаров. И из него нужно взять id товара и код. Я использовал цикл foreach но оно занимает большое количество времени. Слышал, что есть такая штука как разбивка массивов на под массивы, что дает возможность уменьшить нагрузку и увеличить производительность. Но как правильно это сделать ?
  • Вопрос задан
  • 219 просмотров
Пригласить эксперта
Ответы на вопрос 2
dollar
@dollar
Делай добро и бросай его в воду.
Если поиск в массиве осуществляется через foreach, то грош цена такому массиву.

Сила массива в том, что доступ к элементу можно осуществлять по индексу, то есть практически моментально. Так что для оптимизации старайтесь делать именно это. То есть обратите внимание на то, какой критерий поиска вы используете, а не что вам нужно извлечь. Ведь при доступе к элементу (который является объектом или структурой), вы и так получите доступ ко всем его свойствам, основное время тратится именно на поиск. Например, если поиск по какому-то уникальному свойству (артикулу, например), то можно сделать ассоциативный массив, ключом которого является именно артикул.

Конечно, на формирование массива тоже тратится время, какой бы оптимизированный поиск ни был. Поэтому супер большие массивы - тоже признак плохой оптимизации. Не зря же придумали базы данных. А что если в базе не 30 тыс. товаров, а миллиард? Тоже загоните их в массив? Надеюсь, что нет, а вместо этого будете пользоваться средствами поиска самой базы данных.

Но если всё же оптимизировать создание массива наравне с последующим поиском по нему, то нужно будет углубиться в суть задачи, а также изучить, какие вообще есть структуры данных в PHP, какие у них плюсы и минусы, как они устроены на низком уровне, и как на их основе сделать более совершенные структуры данных (конкретно для вашей задачи).
Ответ написан
FanatPHP
@FanatPHP
Чебуратор тега РНР
Слышал, что есть такая штука как разбивка массивов на под массивы, что дает возможность уменьшить нагрузку и увеличить производительность.

Это какая-то адова ересь.
Разбивка на подмассивы только увеличит нагрузку и ухудшит производительность.
поскольку помимо вместо того чтобы сразу взять и обработать массив мы сначала зачем-то разобьем его на куски, а потом будем писать вложенный цикл, чтобы перебрать те же самые данные, которые у нас уже были.

array_chunk может использоваться только для удобства, когда нам надо вывести массив ровными кусочками. Да и то можно обойтись без разбивки, а вывести все кусочки в одном цикле.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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