удалять все значения из массива, сохраняя неизменными ключи

Я действительно должен сделать это, чтобы сбросить массив?

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] => ) ) ) 

Я надеюсь, что это поможет кому-то / кому угодно, и спасибо всем, кто ранее ответил на вопрос.