Что более эффективно для очистки всех значений в массиве? Первый потребовал бы, чтобы я использовал эту функцию каждый раз в цикле второго примера.
foreach ($array as $i => $value) {
unset($array[$i]);
}
Или это
foreach($blah_blah as $blah) {
$foo = array();
//do something
$foo = null;
}
Ответ 1
Как сказал Зак в комментариях ниже, вы можете просто повторно создать его, используя
$foo = array(); // $foo is still here
Если вы хотите, чтобы что-то более мощное использовало unset, так как оно также очистит $foo от таблицы символов, если вам понадобится массив позже, просто повторите его снова.
unset($foo); // $foo is gone
$foo = array(); // $foo is here again
Ответ 2
Если вы просто хотите reset указать переменную в пустой массив, вы можете просто повторно инициализировать ее:
$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
Ответ 3
К сожалению, я не могу ответить на другие вопросы, не имею достаточной репутации, но мне нужно указать что-то, что было ОЧЕНЬ важно для меня, и я думаю, что это поможет другим людям.
Сброс переменной - хороший способ, , если вам не нужна ссылка на исходный массив!
Чтобы понять, что я имею в виду:
Если у вас есть функция, использующая ссылку массива, например функцию сортировки, например
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
, даже если он менее чист и понятен.
Ответ 4
Я бы сказал, первый, если массив ассоциативный. Если нет, используйте цикл for
:
for ($i = 0; $i < count($array); $i++) { unset($array[$i]); }
Если возможно, используя
$array = array();
В reset предпочтительнее использовать массив в пустом массиве.
Ответ 5
Не достаточно unset()
?
unset($array);
Ответ 6
Как насчет $array_name = array();
?
Ответ 7
Используйте array_splice
, чтобы очистить массив и сохранить ссылку:
array_splice($myArray, 0);
Ответ 8
Функция unset полезна, когда сборщик мусора делает свои раунды, не обедая break;
однако функция unset просто уничтожает ссылку на переменные для данных, данные все еще существуют в памяти, и PHP видит, что память используется, несмотря на то, что у нее больше нет указателя на нее.
Решение:
Присвойте null
вашим переменным, чтобы очистить данные, по крайней мере, до тех пор, пока сборщик мусора не схватит его.
$var = null;
а затем отключите его аналогичным образом!
unset($var);
Ответ 9
Я использовал 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();
//делай, что хочешь здесь
?>
Ответ 10
Это мощный и проверенный
unset ($ gradearray);//повторно установить массив