Что является более эффективным для очистки всех значений в массиве? Первый потребовал бы, чтобы я использовал эту функцию каждый раз в цикле второго примера.
foreach ($array as $i => $value) {
unset($array[$i]);
}
Или это
foreach($blah_blah as $blah) {
$foo = array();
//do something
$foo = null;
}
unset($array)
?Ответы:
Как сказал Зак в комментариях ниже, вы можете просто восстановить его, используя
Если вы хотите что-то более мощное, используйте unset, так как это также очистит $ foo из таблицы символов, если вам понадобится массив позже, просто создайте его еще раз.
источник
$foo = array();
?global $foo; unset($foo);
либоunset($GLOBALS['foo']);
unset
очистит$foo
таблицу символов. Мы говорим об очень больших таблицах, которые я, вероятно, рекомендую,$foo = null; unset($foo);
так как это также очистит память немного лучше. Это поведение (GC), однако, не очень постоянное и может изменяться в версиях PHP.$foo = array();
: на самом деле в этом может быть концептуальная проблема: повторное создание структуры - это не то же самое, что ее опустошение. Имея дело с памятью, вы знаете, что это не то же самое, что распределение медленное. Таким образом, несмотря на простоту использования, повторное создание экземпляра может не быть ответом на этот вопрос, особенно если нужно делать это много раз и быстро. Это может сработать, но это сильно зависит от управления памятью PHP, IMO.Если вы просто хотите сбросить переменную в пустой массив, вы можете просто переинициализировать ее:
Обратите внимание, что это будет поддерживать любые ссылки на него:
Если вы хотите разорвать любые ссылки на него, сначала удалите его:
источник
unset
следует использовать. +1К сожалению, я не могу ответить на другие вопросы, у меня недостаточно репутации, но мне нужно указать на то, что было ОЧЕНЬ важно для меня, и я думаю, что это поможет и другим людям.
Сброс переменной является хорошим способом, если вам не нужна ссылка на исходный массив!
Чтобы было понятно, что я имею в виду: если у вас есть функция, которая использует ссылку на массив, например, функция сортировки, например
это не работает! Будьте осторожны,
unset
удаляет ссылку, чтобы переменная$array
создавалась снова и корректно заполнялась, но значения недоступны извне функции.Так что, если у вас есть ссылки, вы должны использовать
$array = array()
вместоunset
, даже если это менее чисто и понятно.источник
Я бы сказал первый, если массив ассоциативный. Если нет, используйте
for
цикл:Хотя, если возможно, используя
Сбросить массив в пустой массив предпочтительнее.
источник
Не
unset()
достаточно хорош?источник
Как насчет
$array_name = array();
?источник
Используйте
array_splice
для очистки массива и сохранения ссылки:array_splice($myArray, 0);
источник
Я использовал unset (), чтобы очистить массив, но я пришел к выводу, что unset () сделает массив пустым, следовательно, необходимо повторно объявить массив, как, например,
источник
Я вижу, что эти вопросы действительно старые, но для этой проблемы я написал рекурсивную функцию для сброса всех значений в массиве. Рекурсивно, потому что возможно, что значения из данного массива также являются массивом. Так что это работает для меня:
Таким образом, я получаю массив со всеми ключами и подмассивами, но с пустыми значениями.
источник
Может быть, простой, экономичный способ (меньше признаков для использования) ...
Мы можем прочитать в руководстве по PHP:
источник
Функция unset полезна, когда сборщик мусора выполняет обход, не имея обеденного перерыва;
однако неустановленная функция просто уничтожает ссылку на переменную данных, данные все еще существуют в памяти, и PHP видит память как используемую, несмотря на то, что указатель на нее больше не существует.
Решение. Назначьте
null
переменные для очистки данных, по крайней мере, до тех пор, пока сборщик мусора не овладеет ими.а затем сбросить его аналогичным образом!
источник
null
вызовет немедленную сборку мусора. У вас есть ссылка на это?NULL
заменит значение, хранящееся в расположении$var
переменной в этом примере?$var
чтобы указать на некоторый глобальныйNULL
объект, и оставит$var
данные в покое, пока они не будут собраны. Почему переводчик был вынужден немедленно перезаписать эти данные?Это мощный и проверенный unset ($ gradearray); // переустановить массив
источник