Подтвердить что ты не робот

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

Нужно ли мне это делать с reset массивом?

foreach ($array as $i => $value) {
    unset($array[$i]);
}

EDIT:

это имеет смысл, поскольку предыдущий эквивалентен $array=array();

foreach ($array as $i => $value) {
    $array[$i]=NULL;
}
4b9b3361

Ответ 1

Определите эту функцию и вызовите ее, когда вам это нужно:

function erase_val(&$myarr) {
    $myarr = array_map(create_function('$n', 'return null;'), $myarr);
}

// It call by reference so you don't need to assign your array to a variable.
// Just call the function upon it
erase_val($array);

Что все!

Ответ 2

$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);

Ответ 3

Заполнить массив старыми ключами и нулевыми значениями

$array = array_fill_keys(array_keys($array), null)

Ответ 4

Нет встроенной функции для reset массива только для ключей.

Альтернативой может быть обратный вызов и 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
}

Ответ 5

foreach($a as &$v)
   $v = null;

Обоснование установки элемента массива в значение null - это то, что для каждого ключа должен иметь значение значение, иначе ключ не имеет смысла. Вот почему он называется ключом - он используется для доступа к значению. Нулевое значение кажется разумным выбором здесь.

Оберните его в процедуру [повторного использования]:

function array_purge_values(&$a)
{
    foreach($a as &$v)
       $v = null;
}

Имейте в виду, что эта версия PHP, начиная с 5.3, передает значения функциям по ссылке по умолчанию, т.е. переменная, предшествующая аргументу аргументов в аргументе функции, является избыточной. Не только это, но вы получите предупреждение о том, что понятие устарело.

Ответ 6

У меня вопрос не очень хорошо, но ваш пример

foreach ($array as $i => $value) {
    unset($array[$i]);
}

эквивалентно

$array = array();

Ответ 7

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

array_walk($ar,function(&$item){$item = null;});

Если вам нужно свести на нет весь массив, просто переназначьте его, чтобы удалить один

$ar = array();

Ответ 8

unset удалит ключ, вам нужно установить значение null или 0 в соответствии с вашим требованием.

Пример

Ответ 10

Почему бы не создать массив с необходимыми ключами и не передать его переменной, если вы хотите reset it?

function resetMyArr(&$arr)
{
 $arr = array('key1'=>null,'key2'=>null); 
}

Ответ 11

Это довольно старая тема, но поскольку я ссылался на нее, прежде чем приступать к собственному решению для более конкретного результата, поэтому я поделюсь с вами этим решением.

Желаемый результат состоял в том, чтобы свести на нет все значения, сохраняя ключи, а также для рекурсивного поиска массива для под-массивов.

РЕЗУЛЬТАТИВНО УСТАНАВЛИВАЕМЫЕ МНОЖЕСТВЕННЫЕ ОГРАНИЧЕНИЯ ЗНАЧЕНИЙ К 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.
  }

}

И здесь он используется, а также ПЕРЕД и ПОСЛЕ вывода содержимого массива.

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

        )

)

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