Как я могу добиться таких результатов. Я хочу сгруппировать данные по b_id, поэтому это моя попытка, но я не могу понять, вместо этого он продолжает отображать разгруппированные данные. ниже я перечислил код и результат, который я хочу и не хочу.
Тестовые данные
$d = "[
{
\"b_id\": 1,
\"d\": 0,
\"lo\": 10,
\"m\": 4000,
\"pts\": [
{
\"amount\": 3500,
\"b_id\": 1,
\"fid\": 2,
\"side\": 2,
\"user_id\": 27
},
{
\"amount\": 3000,
\"b_id\": 1,
\"fid\": 2,
\"side\": 1,
\"user_id\": 27
},
{
\"amount\": 2000,
\"b_id\": 1,
\"fid\": 2,
\"side\": 2,
\"user_id\": 20
},
{
\"amount\": 1000,
\"b_id\": 1,
\"fid\": 2,
\"side\": 1,
\"user_id\": 20
}
],
\"ro\": 10,
\"side\": 2,
\"user_id\": 27,
\"w\": 5000
},
{
\"b_id\": 2,
\"d\": 0,
\"lo\": 10,
\"m\": 6000,
\"pts\": [
{
\"amount\": 4000,
\"b_id\": 2,
\"fid\": 2,
\"side\": 1,
\"user_id\": 27
},
{
\"amount\": 2000,
\"b_id\": 2,
\"fid\": 2,
\"side\": 2,
\"user_id\": 27
},
{
\"amount\": 1000,
\"b_id\": 2,
\"fid\": 2,
\"side\": 2,
\"user_id\": 20
},
{
\"amount\": 2000,
\"b_id\": 2,
\"fid\": 2,
\"side\": 1,
\"user_id\": 20
}
],
\"ro\": 9,
\"side\": 1,
\"user_id\": 27,
\"w\": 3000
}
]";
Код
$d = json_decode($d);
foreach($d as $data => $row) {
foreach($row as $a => $b) {
if($a == "pts") {
foreach($b as $col => $val) {
echo "======[START (b_id: ".$row->b_id."]======<br>";
$odds = getOdds($row->m,$row->lo,$row->ro);
$ret = getMax($val->amount,$odds);
$amount = round(abs($val->amount - $ret),2);
echo "Odds: $odds<br>";
echo "Ret: $ret<br>";
echo "Amount: $amount <br>";
echo "=======[END (b_id: ".$row->b_id."]=======<br><br>";
}
}
}
}
function getOdds($bets,$a,$b) {
return ($bets * $b) / $a;
}
function getMax($bet, $max) {
global $bets;
$ret = 0;
if($bets < $max) {
$bets += $bet;
$ret = ($bets % $max);
if($ret == $bets)
$ret = 0;
} else
$ret = $bet;
return $ret;
}
результаты
======[START (b_id: 1]======
Odds: 4000
Ret: 0
Amount: 3500
=======[END (b_id: 1]=======
======[START (b_id: 1]======
Odds: 4000
Ret: 2500
Amount: 500
=======[END (b_id: 1]=======
======[START (b_id: 1]======
Odds: 4000
Ret: 2000
Amount: 0
=======[END (b_id: 1]=======
======[START (b_id: 1]======
Odds: 4000
Ret: 1000
Amount: 0
=======[END (b_id: 1]=======
======[START (b_id: 2]======
Odds: 5400
Ret: 4000
Amount: 0
=======[END (b_id: 2]=======
======[START (b_id: 2]======
Odds: 5400
Ret: 2000
Amount: 0
=======[END (b_id: 2]=======
======[START (b_id: 2]======
Odds: 5400
Ret: 1000
Amount: 0
=======[END (b_id: 2]=======
======[START (b_id: 2]======
Odds: 5400
Ret: 2000
Amount: 0
=======[END (b_id: 2]=======
Но мне нужны эти результаты
======[START (b_id: 1]======
Odds: 4000
Ret: 0
Amount: 3500
Odds: 4000
Ret: 2500
Amount: 500
Odds: 4000
Ret: 2000
Amount: 0
Odds: 4000
Ret: 1000
Amount: 0
=======[END (b_id: 1]=======
======[START (b_id: 2]======
Odds: 5400
Ret: 4000
Amount: 0
Odds: 5400
Ret: 2000
Amount: 0
Odds: 5400
Ret: 1000
Amount: 0
Odds: 5400
Ret: 2000
Amount: 0
=======[END (b_id: 2]=======
Возможно ли добиться такого результата в foreach? спасибо