删除数组中的所有值,同时保持键完好无损

jfo*_*her 34 php arrays

我真的必须这样做才能重置阵列吗?

foreach ($array as $i => $value) {
    unset($array[$i]);
}
Run Code Online (Sandbox Code Playgroud)

编辑:

这个更有意义,因为前一个相当于 $array=array();

foreach ($array as $i => $value) {
    $array[$i]=NULL;
}
Run Code Online (Sandbox Code Playgroud)

Tyl*_*ter 47

$keys = array_keys($array);
$values = array_fill(0, count($keys), null);
$new_array = array_combine($keys, $values);
Run Code Online (Sandbox Code Playgroud)

获取钥匙

获取具有相同数量元素的空值数组

使用键和键组合它们,并将空值作为值

正如评论所暗示的那样,从PHP 5.2开始就很容易 array_fill_keys

$new_array = array_fill_keys(array_keys($array), null);
Run Code Online (Sandbox Code Playgroud)

  • +1,这些功能经常派上用场.从PHP 5.2开始,甚至还有`array_fill_keys()`. (6认同)

小智 24

使用旧键和空值填充数组

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

  • OP的问题并不清楚这是否实际上是他的意思或想要 - 这就是我想要的,所以+1提供最简单/最短的解决方案. (3认同)

aef*_*fxx 11

定义此功能并在需要时调用它:

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);
Run Code Online (Sandbox Code Playgroud)

就这样!

  • 对不起,这是迄今为止发布的最糟糕的答案 - "create_function()`基本上是`eval()`并且绝对不应该用来解决像这个问题那么简单的问题.此外,它的功能也完全矫枉过正.国际海事组织,这不应该是公认的答案. (10认同)
  • @mindplay.dk 这个答案已经过时了。如果这是实现此类目标的最可靠方法,它是一次性发布的。当时大多数网络主机仍在使用 PHP v5.0。让我们称之为一段历史。 (2认同)

Gor*_*don 9

没有内置函数可以将数组重置为它的键.

另一种方法是通过回调和array_map():

$array = array( 'a' => 'foo', 'b' => 'bar', 'c' => 'baz' );
Run Code Online (Sandbox Code Playgroud)

具有常规回调功能

function nullify() {}
$array = array_map('nullify', $array);
Run Code Online (Sandbox Code Playgroud)

或者使用PHP <5.3的lambda

$array = array_map(create_function('', ''), $array);
Run Code Online (Sandbox Code Playgroud)

或者从PHP 5.3开始使用lambda

$array = array_map(function() {}, $array);
Run Code Online (Sandbox Code Playgroud)

在所有情况下var_dump($array);输出:

array(3) {
  ["a"]=> NULL
  ["b"]=> NULL
  ["c"]=> NULL
}
Run Code Online (Sandbox Code Playgroud)


Dar*_*phy 6

获取数组键,然后使用它们创建一个包含 NULL 值的新数组:

array_fill_keys(array_keys($array), NULL);
Run Code Online (Sandbox Code Playgroud)

关于 array_fill_keys():

array_fill_keys() 函数用指定键的值填充数组。

关于 array_keys():

array_keys() 函数返回数组的所有键。