Эффективность массива PHP и очистка памяти - PullRequest
3 голосов
/ 14 июня 2010

При объявлении массива в PHP индексы могут создаваться не по порядку ... т.е.

Array [1] = 1 Array [19] = 2 Массив [4] = 3

Мой вопрос. При создании такого массива длина 19 равна нулю? Если я попытаюсь получить Array [3], он окажется неопределенным или выдаст ошибку? Также как это влияет на память. Будет ли память 3 индекса или 19?

Также в настоящее время разработчик написал скрипт с 3 массивами FailedUpdates [] FailedDeletes [] FailedInserts []

Более эффективно сделать это таким образом или в случае ассоциативного массива, управляющего несколькими подмассивами

"Failures" array(){
    ["Updates"] => array(){
           [0] => 12
           [1] => 41
                   }
    ["Deletes"] => array(){
           [0] => 122
           [1] => 414
           [1] => 43
                   }
    ["Inserts"] => array(){
           [0] => 12
                   }
}

Ответы [ 3 ]

4 голосов
/ 14 июня 2010

Эффективность памяти - это не то, о чем вам нужно беспокоиться в PHP, если вы не имеете дело с действительно огромными массивами / огромным количеством переменных.

Массив в PHP на самом деле не похож на массив вC ++ или аналогичный язык нижнего уровня;массив в PHP - это карта.У вас есть список ключей (который должен быть уникальным и весь тип строки или целое число) и список значений, соответствующих ключам.Таким образом, следующий допустимый массив:

array(0 => 'butt', 1 => 'potato', 2 => 'tulip')

, но так же

array(5 => 'i', 'barry' => 6, 19 => array(-1 => array(), 7 => 'smock'))

В обоих случаях есть 3 записи вмассив, следовательно, 3 ключа и 3 значения.

В дополнение к ключам и значениям в массиве, один массив может отличаться от другого с помощью порядка , в котором встречаются пары ключ / значение,Если вы определяете массив так, чтобы он имел неотрицательные целые числа в качестве ключей, это часто будет ожидаемый порядок.Порядок имеет значение, когда вы используете такие конструкции, как foreach().

1 голос
/ 14 июня 2010
  • Доступ к $ arr [3] дает уведомление: Notice: Undefined offset: 3 in /data/home/sjoerd/public_html/svnreps/test/a.php on line 3. Вы можете избежать этого, проверяя с помощью isset() или array_key_exists().
  • Нет сохраненных нулей.
  • Наличие пустых элементов не потребует дополнительной памяти.
  • Нужно ли использовать несколько переменных или массив, зависит от контекста и способа использования переменных.
1 голос
/ 14 июня 2010

array [3] будет неопределенным / не установленным, но не вызовет ошибки, и массив будет использовать только память для этих 3 значений - php не похож на C, где вы должны смотреть на эти вещи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...