1

对于以下数据集 ( $data),我正在构建一个多维数组。对于每个唯一键 ( a),都会有一个b与之关联的值数组。

$data = [
  ['a' => 1, 'b' => 23],
  ['a' => 1, 'b' => 97],
  ['a' => 2, 'b' => 23],
  ['a' => 1, 'b' => 47],
  ['a' => 3, 'b' => 23],
];

$result = [];
foreach ($data as $d) {
  if (!isset($result[$d['a']]))
    $result[$d['a']] = [];
  $result[$d['a']][] = $d['b'];
}

print_r($result);

/*
Output should be:

[ 
  1 => [23, 97, 47],
  2 => [23],
  3 => [23],
]
*/

if (!isset($result[$d['a']])) $result[$d['a']] = [];部分很丑。有没有更性感/更有效的方式来构建这个期望的输出?

更新: 谢谢大家,看来我可以走了(甚至没有初始化$result = [];

foreach ($data as $d)
  $result[$d['a']][] = $d['b'];
4

2 回答 2

2

根本不需要那个检查。如果它不是一个数组,它将在添加第一项时创建。

所以“更性感”的解决方案是删除 if 和初始化......

于 2013-05-23T05:48:59.833 回答
1

不必使用 isset() 函数。

试试这个代码,让它“更性感”。

$data = [

  ['a' => 1, 'b' => 23],
  ['a' => 1, 'b' => 97],
  ['a' => 2, 'b' => 23],
  ['a' => 1, 'b' => 47],
  ['a' => 3, 'b' => 23],
];

$result = [];
foreach ($data as $d) {
    $result[$d['a']][]= $d['b'];
}

print_r($result);

于 2013-05-23T06:01:12.363 回答