对于以下数据集($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'];
答案 0 :(得分:2)
根本不需要检查。如果它不是数组,则会在添加第一个项目时创建它。
所以“性感”解决方案是删除if和初始化......
答案 1 :(得分: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);
['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);