在思考和思考之后,我找不到如何解决这个问题的方法。我一直在想循环中的一个循环,但我总是没有尽头。
拥有这样的多维数组:
0 => {'id' => (int) 1,
'meritos' => [
'id' => '39',
'Puntuacion' => '6'
],
'categorias' => [
'id' => '29',
'PuntuacionMax' => '15'
]
},
1 => {'id' => (int) 3,
'meritos' => [
'id' => '40',
'Puntuacion' => '7'
],
'categorias' => [
'id' => '30',
'PuntuacionMax' => '10'
]
},
2 => {'id' => (int) 4,
'meritos' => [
'id' => '41',
'Puntuacion' => '8'
],
'categorias' => [
'id' => '30',
'PuntuacionMax' => '10'
]
},
3 => {'id' => (int) 4,
'meritos' => [
'id' => '42',
'Puntuacion' => '8'
],
'categorias' => [
'id' => '29',
'PuntuacionMax' => '15'
]
},
etc...
我需要总结所有'meritos'=> 'Puntuacion',但有以下不便之处:
具有相同'meritos' => 'Puntuacion'
的{{1}}的总和不能优于'categorias' => 'id'
即。用我给的数组。
我有两个'puntuacion'值属于同一个'categorias' => 'PuntuacionMax'
,分别为8和6。
总和将是14,并没有超过puntuacionMax(15),所以没关系。
属于相同'分类'的另外两个'puntuacion'值=> 'id'(30)是7和8。 总和将是15但超过puntuacionMax(10),因此结果必须为10.
最终的总和值为24(14和10之和)
提前感谢您的帮助。
答案 0 :(得分:0)
我认为结果应该是这样的。
$resultArray = array();
foreach ($data as $item) {
if (!isset($resultArray[$item['categorias']['id']])) $resultArray[$item['categorias']['id']] = array('Puntuacion' => 0, 'PuntuacionMax' => $item['categorias'][PuntuacionMax]);
$resultArray[$item['categorias']['id']]['Puntuacion'] += $item['meritos']['Puntuacion'];
}
$result = 0;
foreach ($resultArray as $row) {
if ($row['Puntuacion'] > $row['PuntuacionMax']) $row['Puntuacion'] = $row['PuntuacionMax'];
$result += $row['Puntuacion'];
}