原始数据
Array
(
[0] => Array
(
[bet_id] => 7
[agent_id] => 2
[bet_type] => 1
[amount] => 0
[name] => ethan
)
[1] => Array
(
[bet_id] => 7
[agent_id] => 2
[bet_type] => 3
[amount] => 0
[name] => ethan
)
[2] => Array
(
[bet_id] => 7
[agent_id] => 4
[bet_type] => 1
[amount] => 2
[name] => alex
)
[3] => Array
(
[bet_id] => 7
[agent_id] => 4
[bet_type] => 4
[amount] => 100
[name] => alex
)
)
我陷入了将上述数据分开的逻辑思考。上面的数组将循环所有用户数据,这里有2个用户。如何基于agentId将其合并为2个数组。它将变成如下。
Array
(
[0] => Array
(
[agent_id] => 2
[name] => ethan
[1] => 2 //bettype & amount
[3] => 0 //bettype & amount
[bet_id] => 7
)
[1] => Array
(
[agent_id] => 4
[name] => alex
[1] => 0 //bettype & amount
[4] => 100 //bettype & amount
[bet_id] => 7
)
)
注意:唯一不同的数据是agent_id,bet_type和数量。其他数据将相同。
答案 0 :(得分:1)
将bet_type
用作键,将amount
用作值会使您的数据结构看起来很糟,但让它成为可能
$result = [];
foreach($data as $user) {
$found = -1;
for($i = 0; $i<count($result); $i++) {
if($result[$i]["agent_id"] == $user["agent_id"]) {
$found = $i;
break;
}
}
// if not found, create new
if($found == -1) {
$result[] = [
"agent_id" => $user["agent_id"],
"name" => $user["name"],
"bet_id" => $user["bet_id"],
$user["bet_type"] => $user["amount"]
];
} else {
$result[$i][$user["bet_type"]] = $user["amount"];
}
}
$data
是您的数组,输出将如下所示
Array
(
[0] => Array
(
[agent_id] => 2
[name] => ethan
[bet_id] => 7
[1] => 0
[3] => 0
)
[1] => Array
(
[agent_id] => 4
[name] => alex
[bet_id] => 7
[1] => 2
[4] => 100
)
)
我建议您通过将bet_type
放在这样的子数组上来更改其位置
$result = [];
foreach($data as $user) {
$found = -1;
for($i = 0; $i<count($result); $i++) {
if($result[$i]["agent_id"] == $user["agent_id"]) {
$found = $i;
break;
}
}
// if not found, create new
if($found == -1) {
$result[] = [
"agent_id" => $user["agent_id"],
"name" => $user["name"],
"bet_id" => $user["bet_id"],
"details" => [
$user["bet_type"] => $user["amount"]
]
];
} else {
$result[$i]["details"][$user["bet_type"]] = $user["amount"];
}
}
这将使您的数据更易于查看
输出将是这样
(
[0] => Array
(
[agent_id] => 2
[name] => ethan
[bet_id] => 7
[details] => Array
(
[1] => 0
[3] => 0
)
)
[1] => Array
(
[agent_id] => 4
[name] => alex
[bet_id] => 7
[details] => Array
(
[1] => 2
[4] => 100
)
)
)