我真的需要这样做来重置数组吗?
foreach ($array as $i => $value) {
unset($array[$i]);
}
编辑:
这个更有意义,因为之前的代码等同于$array=array();
foreach ($array as $i => $value) {
$array[$i]=NULL;
}
$keys = array_keys($array);
$values = array_fill(0, count($keys), null);
$new_array = array_combine($keys, $values);
array_fill_keys
函数$new_array = array_fill_keys(array_keys($array), null);
array_fill_keys()
函数。 - Inshallah使用旧键和空值填充数组
$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 中,您可以使用 Lambda 表达式。
$array = array_map(create_function('', ''), $array);
自 PHP 5.3 起,也可以使用 lambda 表达式。
$array = array_map(function() {}, $array);
在所有情况下 var_dump($array);
输出:array(3) {
["a"]=> NULL
["b"]=> NULL
["c"]=> NULL
}
array_fill_keys()
仍然是更简单/KISS的解决方案。虽然我也喜欢lambda版本。 - stamster定义此函数并在需要时调用它:
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);
这就是全部内容!
create_function()
基本上等同于 eval()
,绝不能用来解决如此微不足道的问题。另外,为此创建一个函数也完全过度。在我看来,这不应该成为被接受的答案。 - mindplay.dkarray_fill_keys(array_keys($array), NULL);
关于 array_fill_keys() 函数:
array_fill_keys() 函数使用指定的键填充数组。
关于 array_keys() 函数:
array_keys() 函数返回数组中所有的键。
foreach($a as &$v)
$v = null;
将数组项设置为null的原因是,数组需要为每个键设置一个值,否则该键就没有意义。这就是为什么它被称为键 - 它用于访问值。在这里使用null值似乎是一个合理的选择。
将其包装在[可重复使用的]过程中:
function array_purge_values(&$a) {
foreach($a as &$v)
$v = null;
}
请记住,PHP 5.3及以后版本默认按引用传递函数参数,即在函数声明中前置变量的&符号是多余的。 不仅如此,你还会收到一个关于这种做法已被弃用的警告。
foreach
。 - Gordon如果您需要将一个关联数组的所有值置为空,可以遍历整个数组并回调将值设置为空,从而保留键。
array_walk($ar,function(&$item){$item = null;});
$ar = array();
这是一个相当古老的话题,但由于在想出自己更具体的解决方案之前我参考了它,所以我将与您分享该解决方案。
期望的结果是将所有值置空,同时保留键,并且递归地搜索子数组。
递归设置多级数组值为空:
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输出。
创建多级数组并调用nullifyArray()函数的PHP代码:
// 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] =>
)
)
)
希望它能帮助到某个人/任何人,感谢之前回答问题的所有人。
我不太明白问题,但是你的例子
foreach ($array as $i => $value) {
unset($array[$i]);
}
等同于
$array = array();
function resetMyArr(&$arr)
{
$arr = array('key1'=>null,'key2'=>null);
}
array_map(function () { return ''; }, $array)
- caw