2017-07-31 22 views
3

我有一個簡單的多維數組像下面PHP重置陣列的第一級無環路

$array = array(
    array('key1'=>array('a','b')), 
    array('key2'=>array('c','d'), 'key3'=>array('e','f')), 
    array('key4'=>array('g','h'), 'key5'=>array('i','j'), 'key6'=>array('k','l', 'm')) 
); 

,我會重置其第一級類似下面

$array = array(
    'key1'=>array('a','b'), 
    'key2'=>array('c','d'), 
    'key3'=>array('e','f'), 
    'key4'=>array('g','h'), 
    'key5'=>array('i','j'), 
    'key6'=>array('k','l','m') 
); 

我知道它很容易與foreach循環來實現,但我想知道是否有可能使用一個行代碼。

我試了一下,到目前爲止

array_map('key', $array); 

但它返回獨生子女數組的第一個關鍵。

有什麼想法?

+2

那麼我建議你試試看,然後尋求幫助,如果你不能得到它的工作 – RiggsFolly

+0

試試看DrKey – Lekens

+0

是隻是嘗試或學習其他方式做事的原因?因爲array_map將需要約。比循環可比的字符數。 (你也可以在一行中編寫這樣的循環) – Kaddath

回答

2

PHP 5.6介紹在PHP中可變參數的功能,其允許一個編寫採取任何額外的參數到使用操作者圖示同一陣列功能:甲...

另一個 - 也許還不太知道 - 使用該運算符的原因是它反過來工作。通過將該運算符放在函數調用的數組之前,它將使該函數獲取該數組的條目,就如同您編寫它們一樣inline

它允許您鍵入:

$array = array_merge(... $array); 

發送$陣列通常將返回$陣列不變。使用splat使array_merge能夠處理未定義數量的第二級數組。由於array_merge本身是一個可變函數,它可以合併你發送給它的任何數組,它可以工作。

+0

令人驚歎的是,我甚至不知道_splat_運算符。非常感謝! – DrKey

1

試試這個:使它與array_reduce一起使用。

$result = array_reduce($array, function($final, $value) { 
    return array_merge($final, $value); 
}, array()); 

online example