Intereting Posts
строка в массив, разделенная на одиночные и двойные кавычки Как использовать spl_autoload_register для множественных diectories в PHP? как я могу связать / использовать PDT с eclipse в ubuntu? terr Получение только кусков загруженного файла в PHP? Почему пустой ожидает T_PAAMAYIM_NEKUDOTAYIM, когда задана не переменная? Замените повторяющиеся значения в массиве новыми случайно генерируемыми значениями Правильная форма неопределенной статьи (a, an) в строках PHP Как настроить Codeigniter для сообщения обо всех ошибках? Загрузите библиотеку, передав параметр в конструктор в codeigniter Регулярное выравнивание или preg_replace пробел, включая вкладки и новые строки Атрибут выбора "selected" CakePHP 2.3 – Тестирование модулей Вход для пользователей глобальные переменные в php не работают как ожидалось Глобальные переменные не работают должным образом с помощью фреймворков Как перечислить все месяцы между двумя датами

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

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

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