我使用的数组是从三个不同的数组合成的数组(3个不同的mysql结果)。每个数组都是一个带有几个字段的关联数组,count
字段是我需要的字段。
以下数组是双重输入。我想检查数组并检查是否有重复项(id
字段)并计算计数字段的总和。解决这个问题的最佳做法是什么?
array(21) {
[2] => array(6) {
["id"] => string(2) "71"
["artist"] => string(7) "Arsenal"
["title"] => string(10) "Oyebo Soul"
["genres_id"] => string(2) "13"
["mbid"] => string(36) "0048d294-1557-4e05-8c82-8bc3f8f11923"
["count"] => string(1) "4"
}
[3] => array(6) {
["count"] => string(1) "3"
["id"] => string(2) "71"
["artist"] => string(7) "Arsenal"
["title"] => string(10) "Oyebo Soul"
["genres_id"] => string(2) "13"
["mbid"] => string(36) "0048d294-1557-4e05-8c82-8bc3f8f11923"
}
结果将是:
[3] => array(6) {
["count"] => string(1) "7"
["id"] => string(2) "71"
["artist"] => string(7) "Arsenal"
["title"] => string(10) "Oyebo Soul"
["genres_id"] => string(2) "13"
["mbid"] => string(36) "0048d294-1557-4e05-8c82-8bc3f8f11923"
}
希望这有任何意义。提前致谢
答案 0 :(得分:0)
解决这个问题肯定会有很多不同的方法,但第一个突然出现的问题是在每组“重复”专辑中使用array_reduce()
:
// Group and index the albums by 'mbid'...
$indexed = array();
foreach ($albums as $album) {
$indexed[$album['mbid']][] = $album;
}
// Reduce all the album groups by simply totaling their 'count's...
$indexed = array_map(function($albums) {
return array_reduce($albums, function($a, $b) {
$a['count'] += $b['count'];
return $a;
});
}, $indexed);
注意:此解决方案假设每个相册副本中的所有信息都与count
相同,但示例中的情况除外。