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


Create assoc array from array of asoc array

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

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

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

在 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),
);

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

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

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