Я должен действительно сделать это для сброса массива??
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_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, по умолчанию передает значения функциям по ссылке, то есть амперсанд, предшествующий переменной аргумента в объявлении функции, является избыточным. Не только это, но вы получите предупреждение о том, что это понятие устарело.
-неустановка приведет к удалению ключа, необходимо установить значение null или 0 в соответствии с вашим требованием.
Почему бы не создать массив с необходимыми ключами и не присвоить его переменной, когда вы хотите его сбросить?
function resetMyArr(&$arr)
{
$arr = array('key1'=>null,'key2'=>null);
}
Я не очень хорошо понимаю вопрос, но ваш пример
foreach ($array as $i => $value) {
unset($array[$i]);
}
эквивалентен
$array = array();
Я думаю, что нужно использовать свойства 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: На самом деле думать об этом, что, вероятно, тоже не получится.