2013-10-22 26 views
1

我想採取一個數組並清除其所有值,同時保持其鍵。通過「清除」我的意思是替換爲一個空的類型值,如''或null。 PHP顯然有不少array functions,但我沒有發現任何事情就是這樣。我目前做這種方式:如何在維護密鑰的同時清除PHP數組中的值?

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

我的問題是,是否有一些內置的PHP函數我忽略了,或任何其他方式,我可以做到這一點沒有在這個級別遍歷數組了嗎?

+1

您是否*已經*擦除了現有的陣列,還是隻是爲了製作一個新陣列而丟棄舊陣列? – Darien

+2

@ThomasAndrews:'array_fill_keys(array_keys($ array),'')'。享受:-) –

回答

1

不知道到底是什麼你的內存/性能/對象管理的需求,這是很難說什麼是最好的。下面是一些「我只是想要的東西短」的替代品:

$array = array_fill_keys(array_values($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版本。

0

您可以使用array_keys來獲取密鑰。如果您願意,您可以使用array_flip,雖然這會將值0到length-1分配給鍵。

這沒有單一的內置功能。你可以嘗試:

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

但是,你現在的代碼確實做得很好。

+1

你知道['array_fill_keys'](http://php.net/array_fill_keys),對吧? 'array_fill_keys(array_keys($ array),'');' –

0

最簡單的方法是array_map

$array = array_map(function($x) { return '';}, $array); 
相關問題