从asoc数组的数组创建assoc数组

时间:2014-04-08 08:28:37

标签: php

如何创建具有结构的新数组:[id] => [prop]来自这样的数据

$foo = array(
    array('id' => 2, 'prop' => 'val2'),
    array('id' => 1, 'prop' => 'val1'),
    array('id' => 3, 'prop' => 'val3'),
);

但是以优雅的方式,没有foreach循环?

2 个答案:

答案 0 :(得分:4)

在PHP 5.5中:

$result = array_column($foo, 'prop', 'id');

对于PHP< 5.5:

$result = array_combine(
   array_map(function($x)
   {
      return $x['id']; 
   }, $foo),
   array_map(function($x)
   {
      return $x['prop']; 
   }, $foo),
);

我必须注意,尽管在回调甚至内置函数中都有隐藏,但它仍然在循环内部 - 因此,就复杂性而言,它与普通循环相同。

答案 1 :(得分:-1)

对于PHP< 5.5,您也可以使用 array_reduce 来获得结果:

$result = array_reduce($foo, function($v, $w) {
  $v[$w['id']] = $w['prop'];
  return $v;
});