2016-05-25 28 views
1

我想知道是否有刪除數組元素的方法,同時將該值存儲在變量中。PHP - 刪除關聯數組元素並將其分配給一個變量在一個動作?

$array = [ 
    'foo' => 'a', 
    'bar' => 'b' 
]; 

// Perform the following with one action? 
$var = $array['foo']; 
unset($array['foo']); 

編輯:我的意思是,如果它可以在不自定義函數來完成。

+3

你可以隨時編寫你自己的函數來完成它:function array_remove(&$ arr,$ key){$ val = $ arr [$ key ]。未設置($ ARR [$鍵]);返回$ val; }' –

+3

如果是第一個或最後一個,array_shift()或array_pop()。但我不認爲你可以在沒有你自己的包裝功能的情況下做到這一點。 –

+0

@NiettheDarkAbsol當然,但這不值得。 – BadHorsie

回答

4

有但它是緩慢和醜陋的。

$var = array_splice($array, array_search('foo', array_keys($array)), 1)['foo']; 

我會堅持2班輪。

+0

好吧,這不是一個功能,只有一個功能構建成一個表達式。我同意你的最終評論:D – JRsz

+1

是的,在PHP中沒有一個單獨的操作。賦值+'unset()'就像它可以得到的那樣簡單(和快速)。 – ShiraNai7

0

它可以在某些情況下完成。

有兩種功能可以做你想要的東西。

array_pop($stack); 
array_shift($stack); 

但array_pop獲取並僅刪除最後一個元素和array_push第一陣列,如果你使用的是關聯數組這可能會導致你的代碼的unexxpected行爲。

但是,如果你可以重構你的數組以適應這些函數而不增加複雜性(這會使得整個事情變得毫無意義),那麼可以這樣做。

的函數的兩個鏈接是:

array_pop

array_shift

陣列功能的整個參考可以在這裏找到。也許你會找到一些能夠滿足你需要的東西: Array functions reference

相關問題