0

经过思考和思考,我没有找到解决这个问题的方法。我一直在考虑循环内的循环,但我总是没有尽头。

拥有像这样的多维数组:

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'相同的总和'categorias' => 'id'不能优于'categorias' => 'PuntuacionMax'

带有我给的数组的 IE。

我有两个属于相同的“puntuacion”值,'categorias' => 'id' (29)它们是 8 和 6。总和为 14,并且不会超过 puntuacionMax (15),所以没关系。

属于相同 'categorias' => 'id' (30) 的另外两个 'puntuacion' 值是 7 和 8。总和将为 15 但超过 puntuacionMax (10),因此结果必须为 10。

最终总和值为 24(14 和 10 的总和)

提前感谢您的帮助。

4

1 回答 1

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'];
}
于 2018-06-15T11:01:58.810 回答