1

我想获取一个数组并清除其所有值,同时保留其键。“清除”是指替换为空类型值,例如 '' 或 null。PHP 显然有很多数组函数,但我没有找到任何可以做到这一点的东西。我目前正在这样做:

foreach ($array as &$value) $value = ''

我的问题是,是否有一些我忽略的内置 php 函数,或者我可以通过任何其他方式来完成此任务,而无需在此级别上迭代数组?

4

3 回答 3

2

最简单的方法是 array_map

$array = array_map(function($x) { return '';}, $array);
于 2013-10-22T19:32:18.243 回答
2

如果不确切知道您的内存/性能/对象管理需求是什么,很难说什么是最好的。这里有一些“我只是想要一些简短的”替代方案:

$array = array_fill_keys(array_keys($a),""); // Simple, right?

$array = array_map(function(){return "";},$a); // More flexible but easier to typo

如果您有一个通过引用传递的数组并且真的想擦除它,那么直接迭代可能是您最好的选择。

foreach($a as $k => $v){
    $a[$k] = "";
}

引用迭代:

/* This variation is a little more dangerous, because $v will linger around
 * and can cause bizarre bugs if you reuse the same variable name later on,
 * so make sure you unset() it when you're done.
 */ 
foreach($a as $k => &$v){
    $v = "";
}
unset($v);

如果您有性能需求,我建议您使用适当大小的数组和 PHP 版本自己对这些进行基准测试。

于 2013-10-22T19:40:59.777 回答
1

您可以使用array_keys来获取密钥。然后,您可以根据需要使用array_flip,尽管这会将值 0 到 length-1 分配给键。

没有单一的内置函数。你可以试试:

array_combine(array_keys($array),array_fill(0,count($array)-1,""));

但实际上,您现在拥有的代码可以很好地完成这项工作。

于 2013-10-22T19:25:28.953 回答