Я действительно должен сделать это, чтобы сбросить массив?
foreach ($array as $i => $value) { unset($array[$i]); }
РЕДАКТИРОВАТЬ:
это имеет смысл, поскольку предыдущий эквивалентен $array=array();
foreach ($array as $i => $value) { $array[$i]=NULL; }
Определите эту функцию и вызовите ее, когда вам это нужно:
function erase_val(&$myarr) { $myarr = array_map(create_function('$n', 'return null;'), $myarr); } // It's call by reference so you don't need to assign your array to a variable. // Just call the function upon it erase_val($array);
Это все!
$keys = array_keys($array); $values = array_fill(0, count($keys), null); $new_array = array_combine($keys, $values);
Получить ключи
Получить массив нулей с одинаковым количеством элементов
Объедините их, используя ключи и ключи, и нули в качестве значений
Как следует из комментариев, это легко сделать с PHP 5.2 с помощью array_fill_keys
$new_array = array_fill_keys(array_keys($array), null);
Заполнить массив старыми ключами и нулевыми значениями
$array = array_fill_keys(array_keys($array), null)
Нет встроенной функции для сброса массива только для его ключей.
Альтернативой может быть обратный вызов и array_map () :
$array = array( 'a' => 'foo', 'b' => 'bar', 'c' => 'baz' );
С регулярной функцией обратного вызова
function nullify() {} $array = array_map('nullify', $array);
Или с лямбдой с PHP <5.3
$array = array_map(create_function('', ''), $array);
Или с лямбдой от PHP 5.3
$array = array_map(function() {}, $array);
Во всех случаях var_dump($array);
выходы:
array(3) { ["a"]=> NULL ["b"]=> NULL ["c"]=> NULL }
foreach($a as &$v) $v = null;
Обоснование установки элемента массива в значение null заключается в том, что для каждого ключа должен иметь значение значение, иначе ключ не имеет смысла. Вот почему он называется ключом – он используется для доступа к значению. Нулевое значение кажется разумным выбором здесь.
Оберните его в процедуру [многоразового использования]:
function array_purge_values(&$a) { foreach($a as &$v) $v = null; }
Имейте в виду, что эта версия PHP, начиная с 5.3, передает значения функциям по ссылке по умолчанию, т. Е. Переменная с аргументами амперсанда в аргументе функции является избыточной. Не только это, но вы получите предупреждение о том, что понятие устарело.
Я не очень хорошо задаю вопрос, но ваш пример
foreach ($array as $i => $value) { unset($array[$i]); }
сforeach ($array as $i => $value) { unset($array[$i]); }
равнозначна
$array = array();
Если вам нужно свести значения значений ассоциативного массива, вы можете пройти весь массив и сделать обратный вызов для установки значений равными нулю, тем самым сохраняя ключи
array_walk($ar,function(&$item){$item = null;});
Если вам нужно свести на нет весь массив, просто переназначьте его, чтобы удалить его
$ar = array();
unset удалит ключ, вам нужно установить значение null или 0 в соответствии с вашим требованием.
пример
Просто сделайте это:
$arrayWithKeysOnly = array_keys($array);
http://php.net/manual/en/function.array-keys.php
EDIT: Обращение к комментарию:
Итак, сделайте следующее:
$arrayWithKeysProper = array_flip(array_keys($array));
http://www.php.net/manual/en/function.array-flip.php
EDIT: На самом деле думать об этом, вероятно, тоже не получится.
Почему бы не создать массив с необходимыми ключами и не передать его переменной, если вы хотите сбросить его?
function resetMyArr(&$arr) { $arr = array('key1'=>null,'key2'=>null); }
Это довольно старая тема, но поскольку я ссылался на нее, прежде чем придумать свое решение для более конкретного результата, поэтому я поделюсь с вами этим решением.
Желаемый результат состоял в том, чтобы свести на нет все значения, сохраняя ключи, а также для рекурсивного поиска массива для подмассивов.
РЕЗУЛЬТАТИВНО УСТАНАВЛИВАЯ МНОЖЕСТВЕННЫЕ МАССИВНЫЕ ЗНАЧЕНИЯ К NULL:
function nullifyArray(&$arrayData) { if (is_array($arrayData)) { foreach ($arrayData as $aKey => &$aValue) { if (is_array($aValue)) { nullifyArray($aValue); } else { $aValue = null; } } return true; // $arrayData IS an array, and has been processed. } else { return false; // $arrayData is NOT an array, no action(s) were performed. } }
И здесь он используется, наряду с выходом BEFORE и AFTER содержимого массива.
PHP-код для создания многоуровневого массива и вызов функции nullifyArray ():
// Create a multi-level array. $testArray = array( 'rootKey1' => 'rootValue1', 'rootKey2' => 'rootValue2', 'rootArray1' => array( 'subKey1' => 'subValue1', 'subArray1' => array( 'subSubKey1' => 'subSubValue1', 'subSubKey2' => 'subSubValue2' ) ) ); // Nullify the values. nullifyArray($testArray);
Перед вызовом nullifyArray ():
Array ( [rootKey1] => rootValue1 [rootKey2] => rootValue2 [rootArray1] => Array ( [subKey1] => subValue1 [subArray1] => Array ( [subSubKey1] => subSubValue1 [subSubKey2] => subSubValue2 ) ) )
ПОСЛЕ ЗВОНОК nullifyArray ():
Array ( [rootKey1] => [rootKey2] => [rootArray1] => Array ( [subKey1] => [subArray1] => Array ( [subSubKey1] => [subSubKey2] => ) ) )
Я надеюсь, что это поможет кому-то / кому угодно, и спасибо всем, кто ранее ответил на вопрос.