我想採取一個數組並清除其所有值,同時保持其鍵。通過「清除」我的意思是替換爲一個空的類型值,如''或null。 PHP顯然有不少array functions,但我沒有發現任何事情就是這樣。我目前做這種方式:如何在維護密鑰的同時清除PHP數組中的值?
foreach ($array as &$value) $value = ''
我的問題是,是否有一些內置的PHP函數我忽略了,或任何其他方式,我可以做到這一點沒有在這個級別遍歷數組了嗎?
我想採取一個數組並清除其所有值,同時保持其鍵。通過「清除」我的意思是替換爲一個空的類型值,如''或null。 PHP顯然有不少array functions,但我沒有發現任何事情就是這樣。我目前做這種方式:如何在維護密鑰的同時清除PHP數組中的值?
foreach ($array as &$value) $value = ''
我的問題是,是否有一些內置的PHP函數我忽略了,或任何其他方式,我可以做到這一點沒有在這個級別遍歷數組了嗎?
不知道到底是什麼你的內存/性能/對象管理的需求,這是很難說什麼是最好的。下面是一些「我只是想要的東西短」的替代品:
$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版本。
您可以使用array_keys
來獲取密鑰。如果您願意,您可以使用array_flip
,雖然這會將值0到length-1分配給鍵。
這沒有單一的內置功能。你可以嘗試:
array_combine(array_keys($array),array_fill(0,count($array)-1,""));
但是,你現在的代碼確實做得很好。
你知道['array_fill_keys'](http://php.net/array_fill_keys),對吧? 'array_fill_keys(array_keys($ array),'');' –
最簡單的方法是array_map
$array = array_map(function($x) { return '';}, $array);
您是否*已經*擦除了現有的陣列,還是隻是爲了製作一個新陣列而丟棄舊陣列? – Darien
@ThomasAndrews:'array_fill_keys(array_keys($ array),'')'。享受:-) –