Php 多维数组到键/值字典;从函数返回,没有控制结构
比较简单,;我只是好奇是否有更好的方法来实现这一点 给定如下数组:Php 多维数组到键/值字典;从函数返回,没有控制结构,php,arrays,multidimensional-array,key-value,Php,Arrays,Multidimensional Array,Key Value,比较简单,;我只是好奇是否有更好的方法来实现这一点 给定如下数组: (将preg\u match\u all()与preg\u SET\u顺序匹配的结果) 我想提取到一个数组中,如下所示: array(2) { ["key"]=> string(3) "foo" ["pattern"]=> string(3) "bar" } 基本上为每个$i生成一个关联数组$array[$i]['key']=>$array[$i]['value'] (如果这听起来令人困惑,对不起,
(将
preg\u match\u all()
与preg\u SET\u顺序
匹配的结果)
我想提取到一个数组中,如下所示:
array(2) {
["key"]=>
string(3) "foo"
["pattern"]=>
string(3) "bar"
}
基本上为每个$i
生成一个关联数组$array[$i]['key']=>$array[$i]['value']
(如果这听起来令人困惑,对不起,已经晚了)
无论如何,这是微不足道的;然而,我正试图使用PHP核心array.*
函数来实现这一点,该函数返回结果数组(抱歉array.\u walk
)
无foreach
,或其他循环控制结构
现在,我要说的是:
\array_combine(\array_map(function($match) {
return (string) $match['key'];
}, $matches), \array_map(function($match) {
return (string) $match['value'];
}, $matches))
这是可行的,但它并不十分简洁;我不喜欢两次array\u map
——一次用于键,一次用于值
有没有更优雅的解决方案,从格式良好的多维数组中提取嵌套值到一维键/值对字典中?使用php v5.3+:
因为:
5.3.0将初始值更改为允许混合,以前为整数
$a=[];数组_walk(函数($m){$a[$m['key']]=$m['value'];},$matches)代码>@kirilloid如此接近;我忘了提到array\u walk
是out,因为它返回bool
而不是结果数组。此调用将作为参数传递给另一个函数,结果数组应传入。谢谢你!您可以将此调用包装到另一个函数中。我担心,没有比这更简短的解决方案允许这么有限的函数集了。@kirilloid我就是这么想的;然而,我对这里的独创性感到惊讶。我一直在分析我的代码美学,过去在so的帮助下证明它是成功的:)我可以总结你的代码,即使是在一个自调用的闭包中,以避免一个无关的函数定义;但我很想看看是否有人能一起破解一些东西。尽管如此,我还是会把你的包起来用的;现场:)
\array_combine(\array_map(function($match) {
return (string) $match['key'];
}, $matches), \array_map(function($match) {
return (string) $match['value'];
}, $matches))
$matches = array(
array(
'key=foo;',
'key' => 'key',
'key',
'value' => 'foo',
'foo',
),
array(
'pattern=bar;',
'key' => 'pattern',
'pattern',
'value' => 'bar',
'bar',
),
);
$a = array_reduce($matches, function ($b, $v) {
return $b + array($v['key'] => $v['value']);
}, array());
print_r($a);
/*
Array
(
[key] => foo
[pattern] => bar
)
*/