Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 多维数组到键/值字典;从函数返回,没有控制结构_Php_Arrays_Multidimensional Array_Key Value - Fatal编程技术网

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
)
*/