根据数组中的其他值对多维数组值求和

时间:2018-06-15 10:45:27

标签: arrays multidimensional-array php-7 array-sum

在思考和思考之后,我找不到如何解决这个问题的方法。我一直在想循环中的一个循环,但我总是没有尽头。

拥有这样的多维数组:

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之和)

提前感谢您的帮助。

1 个答案:

答案 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'];
}