关联数组,在值中查找重复项

时间:2012-11-10 21:38:05

标签: php arrays

我使用的数组是从三个不同的数组合成的数组(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"
}

希望这有任何意义。提前致谢

1 个答案:

答案 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相同,但示例中的情况除外。

相关问题