用PHP合并数组中的数据
我有这种类型的数组用PHP合并数组中的数据,php,arrays,Php,Arrays,我有这种类型的数组 Array ( [0] => Array ( [id] => 90 [name] => Paul [company] => Google [date] => 2018-01-06 [total] => 100.00 ) [1] => Array (
Array
(
[0] => Array
(
[id] => 90
[name] => Paul
[company] => Google
[date] => 2018-01-06
[total] => 100.00
)
[1] => Array
(
[id] => 90
[name] => Paul
[company] => Google
[date] => 2018-07-06
[total] => 100.00
)
[2] => Array
(
[id] => 89
[name] => Ethan
[company] => Yahoo
[date] => 2018-07-10
[total] => 1140.00
)
)
我需要通过合并id
和name
来从上一个数组创建一个新数组(如果它们相同)
所需输出应为:
[[
[id] => 90
[name] => Paul
[company] => Google,
[data] => [
[date] => 2018-01-06,
[total] => 100.00
],
[
[date] => 2018-07-06,
[total] => 100.00
],
], [
[id] => 89
[name] => Ethan
[company] => Yahoo
[data] => [
[date] => 2018-07-10,
[total] => 1140.00
]
]]
我以前试过的:
$output = array();
foreach($input as $data){
$output[$data['id']][] = $data;
$output[$data['name']][] = $data;
$output[$data['company']][] = $data;
}
请问我这里缺什么
谢谢。这应该是您想要的:
foreach ($arr as $a) {
if (empty($resp[$a['id']])) {
$resp[$a['id']] = [
'id' => $a['id'],
'name' => $a['name'],
'company' => $a['company'],
'data' => []
];
}
$resp[$a['id']]['data'][] = [
'date' => $a['date'],
'total' => $a['total']
];
}
这是假设您只关心将日期和总计分组到重复的公司和名称中。因此,您不需要重复,或者只要检查两个连续的元素是否相同就足够了?此外,如果您从数据库中获取数据,我觉得您可以通过修改查询而不是php代码来解决此问题。这可能更重要efficient@Lemures,我只需要检查
id
,但我不希望每次都重复相同的信息name
和company
。所需的输出无效。“Google”后面不能跟数组。必须将该数组分配给新属性。我再次建议您重新考虑sql查询。如果你给我看看桌子的结构,我可能会帮你。这正是我需要的。谢谢。如何删除第一级信息[90]=>数组…
并直接从开始([KDX_Id]=>90
)KDX_Id
是什么意思?是否只希望数组从0
开始,而不是从Id
开始?是的。将其最小化。可以使用数组值()
。循环后,可以调用$resp=Array_值($resp)
。