удалите все значения из массива при сохранении ключей в целости

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

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

Править:

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

foreach ($array as $i => $value) {
    $array[$i]=NULL;
}
34
задан jfoucher 8 February 2010 в 06:25
поделиться

8 ответов

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

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

Вот и все!

11
ответ дан 27 November 2019 в 16:10
поделиться
$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);
47
ответ дан 27 November 2019 в 16:10
поделиться

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

Альтернативой может быть обратный вызов и 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
}
9
ответ дан 27 November 2019 в 16:10
поделиться
foreach($a as &$v)
   $v = null;

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

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

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

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

2
ответ дан 27 November 2019 в 16:10
поделиться

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

Пример

0
ответ дан 27 November 2019 в 16:10
поделиться

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

function resetMyArr(&$arr)
{
 $arr = array('key1'=>null,'key2'=>null); 
}
0
ответ дан 27 November 2019 в 16:10
поделиться

Я не очень хорошо понимаю вопрос, но ваш пример

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

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

$array = array();
0
ответ дан 27 November 2019 в 16:10
поделиться

Я думаю, что нужно использовать свойства Target и Method делегата для передачи для создания выражения Call. Основываясь на образце JulieR, это то, как это будет выглядеть:

Action<int> func = i => Console.WriteLine(i * i);

var callExpr = Expression.Call(Expression.Constant(func.Target), func.Method, Expression.Constant(5));

var lambdaExpr = Expression.Lambda<Action>(callExpr);
var fn = lambdaExpr.Compile();
fn();    //  Prints 25
-121--1672062-

На самом деле вопрос не в том, готов ли Ruby 1.9 для Rails, а скорее в том, готов ли Rails для Ruby 1.9. Из того, что я прочитал, кажется, что Rails (ActiveRecord и т.д.) работает на нем хорошо. У вас могут быть проблемы с любыми ruby драгоценных камней, которые вы можете использовать, которые не готовы 1,9. Проверьте http://isitruby19.com/ , чтобы узнать, прокомментировал ли кто-нибудь конкретные драгоценные камни, которые вы используете.

-121--3894380-

Просто сделайте это:

$arrayWithKeysOnly = array_keys($array);

http://php.net/manual/en/function.array-keys.php

EDIT: Addressing comment:

Ok, затем сделайте следующее:

$arrayWithKeysProper = array_flip(array_keys($array));

http://www.php.net/manual/en/function.array-flip.php

EDIT: На самом деле думать об этом, что, вероятно, тоже не получится.

-1
ответ дан 27 November 2019 в 16:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: