Лучший способ очистить значения массива PHP

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

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);//повторно установить массив