Нужно ли мне это делать с reset массивом?
foreach ($array as $i => $value) {
unset($array[$i]);
}
EDIT:
это имеет смысл, поскольку предыдущий эквивалентен $array=array();
foreach ($array as $i => $value) {
$array[$i]=NULL;
}
Нужно ли мне это делать с reset массивом?
foreach ($array as $i => $value) {
unset($array[$i]);
}
EDIT:
это имеет смысл, поскольку предыдущий эквивалентен $array=array();
foreach ($array as $i => $value) {
$array[$i]=NULL;
}
Определите эту функцию и вызовите ее, когда вам это нужно:
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);
Что все!
$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)
Нет встроенной функции для 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
}
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]);
}
эквивалентно
$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
РЕДАКТИРОВАТЬ: Адресация комментария:
Итак, сделайте следующее:
$arrayWithKeysProper = array_flip(array_keys($array));
http://www.php.net/manual/en/function.array-flip.php
EDIT: На самом деле, думая об этом, это, вероятно, тоже не сработает.
Почему бы не создать массив с необходимыми ключами и не передать его переменной, если вы хотите reset it?
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.
}
}
И здесь он используется, а также ПЕРЕД и ПОСЛЕ вывода содержимого массива.
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] =>
)
)
)
Я надеюсь, что это поможет кому-то/кому угодно, и спасибо всем, кто ранее ответил на вопрос.