1

私が使用する配列は、3 つの異なる配列 (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"
}

これが意味をなすことを願っています。前もって感謝します

4

1 に答える 1

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ます。

于 2012-11-10T21:50:27.837 に答える