相當簡單;我只是好奇,如果有更好的方式來實現這一點。多維數組到鍵/值字典;從功能返回,沒有控制結構
鑑於陣列如下:
(的preg_match_all()
與PREG_SET_ORDER
結果)
$matches = array(2) {
[0]=>
array(5) {
[0]=>
string(8) "key=foo;"
["key"]=>
string(3) "key"
[1]=>
string(3) "key"
["value"]=>
string(3) "foo"
[2]=>
string(3) "foo"
}
[1]=>
array(5) {
[0]=>
string(12) "pattern=bar;"
["key"]=>
string(7) "pattern"
[1]=>
string(7) "pattern"
["value"]=>
string(3) "bar"
[2]=>
string(3) "bar"
}
}
我想提取到一個數組,執行以下操作:
array(2) {
["key"]=>
string(3) "foo"
["pattern"]=>
string(3) "bar"
}
基本上爲每個生成一個關聯數組$array[$i]['key'] => $array[$i]['value']
0。
(如果這聽起來有點混亂,對不起,這是後期)
無論如何,這是微不足道的;然而,我試圖完成這個使用PHP核心array_*
函數,即返回結果數組(對不起array_walk
)。
否foreach
或其他循環控制結構。
現在,我已經得到了下來,這樣的:
\array_combine(\array_map(function($match) {
return (string) $match['key'];
}, $matches), \array_map(function($match) {
return (string) $match['value'];
}, $matches))
其中一期工程,但它不完全簡潔;我不喜歡它不得不array_map
兩次 - 一次爲鍵,一次爲值。
有沒有更多的優雅的解決方案,從一個格式良好的多維數組中提取嵌套值到一維的鍵/值對字典?
'$ A = []; array_walk($ m){$ a [$ m ['key']] = $ m ['value'];},$ matches);' – kirilloid 2012-03-28 06:44:20
@kirilloid如此接近;我忘了提及'array_walk'因爲它返回'bool'而不是結果數組而退出。這個調用被作爲一個參數傳遞給另一個函數,並且結果數組應該被傳入。謝謝! – Dan 2012-03-28 06:47:43
您可以將此調用包裝到另一個函數中。而且,我擔心,有這麼有限的功能*允許*,沒有更短的解決方案。 – kirilloid 2012-03-28 06:49:12