Php удалить массив из памяти

Обновлено: 01.07.2024

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

Да, но почему вы хотите оценить нулевой массив, который вы установили таким образом? Источник? Ни одна переменная в памяти не выглядит так, как будто бы она была меньше, чем var - null.

Как сказал Зак в комментариях ниже, вы можете просто восстановить его, используя

Если вы хотите что-то более мощное, используйте unset, так как это также очистит $ foo из таблицы символов, если вам понадобится массив позже, просто создайте его еще раз.

Почему бы просто не восстановить его как $foo = array(); ? @NishamMahsin Либо используйте, global $foo; unset($foo); либо unset($GLOBALS['foo']); @vivoconunxino Я написал это так из-за вопроса авторов «Лучший способ очистить значения массива PHP». Это говорит «ясно», а не «новый экземпляр». Использование unset очистит $foo таблицу символов. Мы говорим об очень больших таблицах, которые я, вероятно, рекомендую, $foo = null; unset($foo); так как это также очистит память немного лучше. Это поведение (GC), однако, не очень постоянное и может изменяться в версиях PHP. unset () иногда очень плохо и может вызвать проблемы, если вы используете его неправильно. Он не отвечает на ОП правильно. Не знаю, почему он принял это как лучший ответ, его комментарий на его собственный вопрос говорит, что проблема с unset заключается в том, что он удаляет переменную. Чтобы увидеть, какие проблемы вызывает это решение, взгляните на мой ответ здесь . Для всех, кто поддерживает $foo = array(); : на самом деле в этом может быть концептуальная проблема: повторное создание структуры - это не то же самое, что ее опустошение. Имея дело с памятью, вы знаете, что это не то же самое, что распределение медленное. Таким образом, несмотря на простоту использования, повторное создание экземпляра может не быть ответом на этот вопрос, особенно если нужно делать это много раз и быстро. Это может сработать, но это сильно зависит от управления памятью PHP, IMO.

Если вы просто хотите сбросить переменную в пустой массив, вы можете просто переинициализировать ее:

Обратите внимание, что это будет поддерживать любые ссылки на него:

Если вы хотите разорвать любые ссылки на него, сначала удалите его:

Я думаю, что это лучший ответ. Должны быть приняты. Он показывает самый простой способ, а также описывает, почему и когда unset следует использовать. +1 Это мой код: justpaste.it/1gt46 . Как я могу объявить более одного идентификатора в переменной. Объявление одного значения: $ productId = 19; Как я могу объявить более чем одно значение в $ productId =? @Rathinam Не уверен, что это имеет отношение к очистке массива. Пожалуйста, опубликуйте новый вопрос в Stackoverflow и вставьте свой код прямо в вопрос.

К сожалению, я не могу ответить на другие вопросы, у меня недостаточно репутации, но мне нужно указать на то, что было ОЧЕНЬ важно для меня, и я думаю, что это поможет и другим людям.

Сброс переменной является хорошим способом, если вам не нужна ссылка на исходный массив!

Чтобы было понятно, что я имею в виду: если у вас есть функция, которая использует ссылку на массив, например, функция сортировки, например

это не работает! Будьте осторожны, unset удаляет ссылку, чтобы переменная $array создавалась снова и корректно заполнялась, но значения недоступны извне функции.

Так что, если у вас есть ссылки, вы должны использовать $array = array() вместо unset , даже если это менее чисто и понятно.

это должен быть ответ - OP говорит, что значения массива должны быть чистыми, а не ссылаться на всю переменную массива.

Я бы сказал первый, если массив ассоциативный. Если нет, используйте for цикл:

Читайте также: