Что более эффективно для очистки всех значений в массиве? Первый из них потребовал бы, чтобы я использовал эту функцию каждый раз в цикле второго примера.
foreach ($array as $i => $value) { unset($array[$i]); }
Или это
foreach($blah_blah as $blah) { $foo = array(); //do something $foo = null; }
Как сказал Зак в комментариях ниже, вы можете просто повторно создать его, используя
$foo = array(); // $foo is still here
Если вы хотите, чтобы что-то более мощное использование было отменено, так как оно также очистит $ foo от таблицы символов, если вам понадобится массив позже, просто повторите его снова.
unset($foo); // $foo is gone $foo = array(); // $foo is here again
сunset($foo); // $foo is gone $foo = array(); // $foo is here again
Если вы просто хотите сбросить переменную в пустой массив, вы можете просто повторно инициализировать ее:
$foo = array();
Обратите внимание, что это будет содержать ссылки на него:
$foo = array(1,2,3); $bar = &$foo; // ... $foo = array(); // clear array var_dump($bar); // array(0) { } -- bar was cleared too!
Если вы хотите разорвать любые ссылки на него, сначала отключите его:
$foo = array(1,2,3); $bar = &$foo; // ... unset($foo); // break references $foo = array(); // re-initialize to empty array var_dump($bar); // array(3) { 1, 2, 3 } -- $bar is unchanged
с$foo = array(1,2,3); $bar = &$foo; // ... unset($foo); // break references $foo = array(); // re-initialize to empty array var_dump($bar); // array(3) { 1, 2, 3 } -- $bar is unchanged
К сожалению, я не могу ответить на другие вопросы, не имею достаточной репутации, но мне нужно указать что-то, что было ОЧЕНЬ важно для меня, и я думаю, что это поможет другим людям.
Сброс переменной – отличный способ, если вам не нужна ссылка на исходный массив!
Чтобы понять, что я имею в виду: если у вас есть функция, использующая ссылку массива, например функцию сортировки, например
function special_sort_my_array(&$array) { $temporary_list = create_assoziative_special_list_out_of_array($array); sort_my_list($temporary_list); unset($array); foreach($temporary_list as $k => $v) { $array[$k] = $v; } }
сfunction special_sort_my_array(&$array) { $temporary_list = create_assoziative_special_list_out_of_array($array); sort_my_list($temporary_list); unset($array); foreach($temporary_list as $k => $v) { $array[$k] = $v; } }
это не работает! Будьте внимательны здесь, unset
удаляет ссылку, поэтому переменная $array
создается снова и заполняется правильно, но значения не доступны извне функции.
Поэтому, если у вас есть ссылки, вам нужно использовать $array = array()
вместо unset
, даже если он менее чист и понятен.
Я бы сказал, первый, если массив ассоциативный. Если нет, используйте цикл for
:
for ($i = 0; $i < count($array); $i++) { unset($array[$i]); }
Хотя, если это возможно, использование
$array = array();
Предпочтительным является сброс массива в пустой массив.
Не unset()
достаточно хорошо?
unset($array);
Как насчет $array_name = array();
?
Используйте array_splice
для array_splice
массива и сохранения ссылки:
array_splice($myArray, 0);
Функция unset полезна, когда сборщик мусора делает свои раунды, не имея перерыва на обед;
однако функция unset просто уничтожает ссылку на переменные для данных, данные все еще существуют в памяти, и PHP видит, что память используется, несмотря на то, что у нее больше нет указателя на нее.
Решение. Назначьте null
своим переменным, чтобы очистить данные, по крайней мере до тех пор, пока сборщик мусора не схватит его.
$var = null;
а затем отключить его аналогичным образом!
unset($var);
я использовал unset (), чтобы очистить массив, но я понял, что unset () будет отображать массив null, следовательно, необходимо повторно объявить массив, например, например
<?php $arr = array(); array_push($arr , "foo"); unset($arr); // this will set the array to null hence you need the line below or redeclaring it. $arr = array();
с<?php $arr = array(); array_push($arr , "foo"); unset($arr); // this will set the array to null hence you need the line below or redeclaring it. $arr = array();
// делай то, что хочешь здесь
?>
Это мощный и проверенный unset ($ gradearray); // повторно задает массив