- PHP: у массивов максимальный размер?
- Ограничение размера массива в PHP
- Solutions Collecting From Web of «Ограничение размера массива в PHP»
- PHP: максимальный размер массивов?
- Какой максимальный объём данных в массив?
- Какой максимальный размер массива в PHP?
- 5 ответов
- 2147483647 элементов даже на 64-битном PHP.(PHP 7.2.24)
PHP: у массивов максимальный размер?
Да, существует ограничение на максимальное количество элементов. Структура хеш-таблицы (массивы в основном обертки вокруг хеш-таблицы) определяется следующим образом (PHP 5.3):
typedef struct _hashtable < uint nTableSize; uint nTableMask; uint nNumOfElements; ulong nNextFreeElement; Bucket *pInternalPointer; /* Used for element traversal */ Bucket *pListHead; Bucket *pListTail; Bucket **arBuckets; dtor_func_t pDestructor; zend_bool persistent; unsigned char nApplyCount; zend_bool bApplyProtection; #if ZEND_DEBUG int inconsistent; #endif >HashTable;
typedef unsigned int uint;
предел – это максимальный размер unsigned int (обычно 2 ^ 32-1 для 32-разрядной ОС и для большинства 64-разрядных ОС).
На практике, однако, за исключением машин с большим количеством ОЗУ и 32-битных int, вы всегда будете нажимать на ограничение памяти, прежде чем это станет проблемой.
Единственное, что я нашел в ссылке на php, – это from bytes.com/forum :
Я не думаю, что существует ограничение на размер массива, но есть ограничение на то, сколько памяти может использовать ваш скрипт.
Директива ‘memory_limit’ в файле конфигурации php.ini содержит максимальный объем памяти, который могут использовать ваши сценарии. Попробуйте изменить это, посмотрите, поможет ли это.
Размер массива зависит от конфигурации сервера и конфигурации php.ini
Но нет ограничений на количество записей, которые может иметь массив. Только огромный размер массива может привести к «нехватке памяти».
Ограничение размера массива в PHP
Я задаюсь вопросом, существует ли ограничение размера для массива в php 5? Я написал сценарий php, чтобы изменить последний элемент каждой строки в файле. распечатайте содержимое измененного файла , когда я запускаю скрипт в файле небольшого размера (т.е. каждая строка содержит 4 значения), он будет работать. Когда я запускаю его в более крупном файле (например, 60000 строк, каждый из которых содержит 90 значений), он не изменяет бит исходного файла, но сценарий не выдавал никакого сообщения об исключении во время выполнения. Что это за проблема?
Solutions Collecting From Web of «Ограничение размера массива в PHP»
У вас может быть нехватка памяти, так как размер вашего массива (теоретически) ограничен только объемом памяти, выделенной для скрипта. Поместите ini_set(‘memory_limit’, ‘1024M’); в начале вашего скрипта установить ограничение на 1 ГБ. Возможно, вам понадобится увеличить это еще выше для достижения наилучших результатов.
Поскольку manyxcxi говорит, что вам, вероятно, придется увеличить memory_limit. Иногда вы также можете уменьшить использование памяти, отключив большие переменные с unset ($ var). Это необходимо только тогда, когда переменная остается в области далеко за ее последней точкой использования.
Вы случайно читаете весь файл, транслируете его, а затем записываете новый файл? Если это так, вы можете уменьшить использование памяти, работая в цикле, где вы читаете небольшую часть, обрабатываете ее и записываете и повторяете, пока не дойдете до конца файла. Но только если алгоритму преобразования не нужен весь файл, чтобы преобразовать небольшую часть.
- Почему .htaccess перенаправляет URL-адрес маршрутизации, но разрывает ссылки css / js / image после двух уровней в глубину?
- Как получить последний вставленный идентификатор таблицы MySQL в PHP?
- Как я могу разобрать JSON-файл с PHP?
- PHP: преобразовать строку пары значений, разделенных запятыми, в массив
- Настройка нескольких языков wordpress
- Категории и подкатегории с php, mysql и smarty
- В чем разница между find () findOrFail () first () firstOrFail
- Пользовательские сообщения об исключении: лучшие практики
- Добавьте заголовок к каждому запросу с использованием .htaccess
- Предупреждение: mysql_num_rows () ожидает, что параметр 1 будет ресурсом, массив указан в
- Как продолжить процесс после ответа на запрос ajax в PHP?
- Добавление нескольких конфигурационных массивов в PhalconPHP
- Проблема PHP Phar – file_exists ()
- Подтверждение страны / города / штата
- Дата чтения человеком с использованием PHP
PHP: максимальный размер массивов?
Да, существует ограничение на максимальное количество элементов. Структура хеш-таблицы (массивы в основном обертки вокруг хэш-таблицы) определяется следующим образом (PHP 5.3):
typedef struct _hashtable < uint nTableSize; uint nTableMask; uint nNumOfElements; ulong nNextFreeElement; Bucket *pInternalPointer; /* Used for element traversal */ Bucket *pListHead; Bucket *pListTail; Bucket **arBuckets; dtor_func_t pDestructor; zend_bool persistent; unsigned char nApplyCount; zend_bool bApplyProtection; #if ZEND_DEBUG int inconsistent; #endif >HashTable;
typedef unsigned int uint;
предел — это максимальный размер unsigned int (обычно 2 ^ 32-1 для 32-разрядной ОС и для большинства 64-разрядных ОС).
Однако на практике, за исключением машин с большим количеством ОЗУ и 32-битных int, вы всегда будете нажимать на ограничение памяти, прежде чем это станет проблемой.
Вероятно, вы столкнетесь с серьезными проблемами с производительностью при заполнении и разыменовании элементов массива до того, как достигнете предела памяти в большинстве систем.
@symcbean Symcbean Я сомневаюсь в этом. Поиски и добавления занимают среднее постоянное время. Единственное, что может занять время, — это изменить размер хеш-таблицы, но этого следует избегать, если общее количество элементов может быть известно заранее.
@Artefacto, почему вы говорите, что большинство 64-битных ОС имеет только 2 ^ 32-1 для беззнакового целого?
Единственное, что я нашел в ссылке на php, — это bytes.com/forum:
Я не думаю, что существует ограничение на размер массива, но существует ограничение на количество памяти, которую может использовать ваш script.
Директива ‘memory_limit’ в файле конфигурации php.ini содержит максимальный объем памяти, который могут использовать ваши сценарии. Попробуйте изменить это, посмотрите, поможет ли это.
Какой максимальный объём данных в массив?
Скажите плз. Какой максимальный объём данных можно поместить в массив?
Ситуация след.:
из базы данных (ORACLE) тащится огромный лог (не имеющий отношения к серверу, ПХП, базе и программированию вообще ). Необходимо провести его обработку (анализ). Для этого есть несколько ф-ций. Их кол-во не фиксированно, они реализованы в виде плагинов. Как входной параметр — лог (результат выборки с 20 полями или массив).
Как лучше реализовать, результат выборки передавать (нежелательно) или всё-таки огромный массив (тогда собсно и сабж про максимальный объём)?
Временем выполнения скрипта пренебречь
Спасибо. Тока плз без RTFM
MSI G31M3 V2 Какой максимальный объём оперативки?
В инструкции написано Память DDR2 667/ 800 SDRAM (4GB Max) 2 слота DDR2 DIMM (240-конт/ 1.8V).
Какой максимальный объём жесткого диска поддерживает сервер
Добрый день! Как узнать какой максимальный объём жесткого диска поддерживает данный сервер.
Установите, какой из гидридов массой 1 г образует максимальный объем водорода
народ, прошу мне пожалуйста помочь кто чем сможет, дали писать олимпиаду человеку не так уж и.
Какой максимальный объем RAM видеокарты, которую можно установить на материнку g31T-m7 ?
Максимальный объем видео карты которую можно установить на материнку g31T-m7 . У меня GeForce.
Сам массив, как тип данных, не имеет каких-то ограничений на максимальный объем данных, кроме, конечно, объема памяти на компьютере. Однако есть ограничения среды исполнения PHP на максимальный объем памяти который может занять каждый скрипт. Настраивается он через параметр memory_limit в php.ini. У меня он равен 8 Мб.
Как лучше его обработать трудно посоветовать так как непонятно какой объем данных скрывается под словами «огромный лог». 2 Tб? Вообще же методика больших объемов данных, которые не могут все поместиться в ОЗУ, всегда поздразумевает обработку блоками фиксированного или плавающего размера.
Сообщение от bazile
Сам массив, как тип данных, не имеет каких-то ограничений на максимальный объем данных, кроме, конечно, объема памяти на компьютере. Однако есть ограничения среды исполнения PHP на максимальный объем памяти который может занять каждый скрипт. Настраивается он через параметр memory_limit в php.ini. У меня он равен 8 Мб.
Как лучше его обработать трудно посоветовать так как непонятно какой объем данных скрывается под словами «огромный лог». 2 Tб? Вообще же методика больших объемов данных, которые не могут все поместиться в ОЗУ, всегда поздразумевает обработку блоками фиксированного или плавающего размера.
Спасибо, это то что я хотел услышать.
По поводу объёма — трудно ответить, но не 2 Тб.
Порядка сотни тысяч записей. Просто даже по локалке с мощным оракловым серваком танется мучительно долго, порядка 4-5 минут.
И ещё уточнение. Есть массив-результат выборки, массив как параметр входной для каждой ф-ции и массивы-результаты работы ф-ций. Можно их всех впихнуть в эти 8 Мб или лучше очищать переменные-массивы после вывода на экран или в файл. Просто хотелось бы иметь возможность выбора работы с разными массивами (обр. той или иной ф-цией).
Можно ли увеличить этот параметр (мемори_лимит) например до 80-100 Мб? Этот кусок памяти исп. во время работы скрипта или постоянно во время работы сервака?
Какой максимальный размер массива в PHP?
Нам нравится хранить значения базы данных в массиве. Но мы не знаем максимальный размер массива, который разрешен в PHP?
5 ответов
Нет предела для ограничения массива. Существует ограничение на объем памяти, который может использовать ваш скрипт. Это можно изменить в «memory_limit» в вашей конфигурации php.ini.
Размер массива ограничен только объемом памяти вашего сервера. Если ваш массив становится слишком большим, вы получите ошибку «недостаточно памяти».
Мне кажется, это ограничение на 16-битное целое число со знаком. (2^15)
$ar = []; while (array_push($ar, null))
Если, как и я, вам нужно использовать огромный массив в классе в PHP 5.6.40 и вы обнаружили, что существует ограничение на размер массивов классов, так что они переполняются и перезаписываются при превышении 32768 элементов, то вот Решение, которое я нашел, работает.
Создайте публичную функцию с огромным массивом в ней в качестве локальной переменной. Затем назначьте эту локальную переменную переменной класса. Вызовите эту функцию прямо в конструкторе. Вы увидите, что он печатает правильный размер массива вместо размера, оставшегося после переполнения.
class Zipcode_search < public $zipcodes; public function __construct() < $this->setHugeArray(); print "size is ".sizeof($this->zipcodes). "
"; > public function setHugeArray()< $zipcodes=[too much stuff];//actual array with +40,000 elements etc. $this->zipcodes = $zipcodes; > >
2147483647 элементов даже на 64-битном PHP.(PHP 7.2.24)
В PHP, typedef struct _hashtable определяется с uint значения для nTableSize и nNumOfElements .
Из-за этого самый большой массив, который вы можете создать с помощью или кажется 2^32-1 предметы. Хотя ключи могут быть любыми, включая числа за пределами этого диапазона, если вы начнете с нуля с размером шага 1, ваш самый высокий индекс может быть 2147483646.
Если вы задаете этот вопрос, вы, вероятно, видели ошибку, например:
# php -r 'array_fill(0, 2147483648, 0);' PHP Warning: array_fill(): Too many elements in Command line code on line 1
# php -r 'array_fill(0, 2147483647, 0);' Segmentation fault (core dumped)
. или, скорее всего, ошибка, явно ссылающаяся на » максимальный размер массива «:
php -r 'range(0,2147483647);' PHP Warning: range(): The supplied range exceeds the maximum array size: start=0 end=2147483647 in Command line code on line 1
Предостережение для тех, кто читает этот вопрос:
Наиболее распространенное место, где вы столкнетесь с этим, — это неправильное использование/злоупотребление range() оператор, как если бы это был итератор. В других языках он есть, но в PHP его нет: это оператор заполнения массива, как и array_fill() .
Таким образом, велики шансы, что вы можете полностью избежать использования массива. Небезопасно делать такие вещи, как:
foreach (range($min, $max, $step))
Точно так же я видел, как люди делали:
// Takes 3 minutes with $min=0, $max=1e9, $step=1. // Segfaults with slightly larger ranges. $numItems = count(range($min, $max, $step));
Вместо этого его можно переписать более безопасным, идиоматичным и эффективным способом:
// Takes microseconds with $min=0, $max=1e9, $step=1. // Can handle vastly larger numbers, too. $numItems = ($max - $min) % $step;
Если вы сталкиваетесь с ошибками, связанными с размером массива, велики шансы, что вы делаете сумасшедшие вещи, которых вам, вероятно, следует избегать.