PHP
 Computer >> コンピューター >  >> プログラミング >> PHP

PHPで重複する値を多次元配列にマージする方法


PHPでは、年齢・名前・趣味といった情報を持つ連想配列のリストから、特定のキー(ここでは「趣味」)を基準にデータをグループ化し、重複する値をひとつの多次元配列にまとめることができます。以下にその実装例を示します。

サンプルコード

<?php
$my_arr = array(
    array('Age'=>23, 'name'=>'Joe', 'hobby'=>'Cycling'),
    array('Age'=>26, 'name'=>'Hannah', 'hobby'=>'Rowing'),
    array('Age'=>30, 'name'=>'Dev', 'hobby'=>'Cycling'),
    array('Age'=>30, 'name'=>'Dev', 'hobby'=>'Cycling')
);
foreach($my_arr as $entry => $vals)
{
    $new_vals[$vals['hobby']][]=$vals;
}
echo "The unique array elements are ";
print_r($new_vals);
?>

実行結果

The unique array elements are Array
(
    [Cycling] => Array
    (
        [0] => Array
        (
            [Age] => 23
            [name] => Joe
            [hobby] => Cycling
        )

        [1] => Array
        (
            [Age] => 30
            [name] => Dev
            [hobby] => Cycling
        )

        [2] => Array
        (
            [Age] => 30
            [name] => Dev
            [hobby] => Cycling
        )

    )

    [Rowing] => Array
    (
        [0] => Array
        (
            [Age] => 26
            [name] => Hannah
            [hobby] => Rowing
        )

    )

)

コードの解説

まず、年齢(Age)、名前(name)、趣味(hobby)をキーとする連想配列を複数格納した配列を定義します。このサンプルでは、同じ人物「Dev」のデータが2件含まれています。

続いてforeachループで配列を1件ずつ走査し、各要素の「hobby」の値を新しい配列$new_valsのキーとして使用します。「[]」による代入を行うことで、同じキーが現れるたびにそのキーに紐づく配列へ要素が自動的に追記されていきます。

この処理により、趣味が同じデータは同じグループへ集約され、結果として重複する値がひとつの多次元配列にマージされた形になります。これにより、キーごとに整理された構造的なデータを簡単に取得できます。

補足:完全な重複レコードを除外したい場合

上記の方法はあくまで「指定したキーによるグループ化」です。まったく同一内容のレコード(この例ではDevの2件目)自体を除去したい場合は、array_uniqueやin_array、あるいはmd5(serialize($vals))のハッシュ値をキーにした重複チェックなどを組み合わせるとよいでしょう。用途に応じて使い分けることで、より柔軟なデータ整形が可能になります。

  1. PHPのarray_count_values()関数とは?配列内の値の出現回数を数える方法

    PHPのarray_count_values()関数は、配列内に各値が何回出現するかを集計し、その結果を連想配列として返す関数です。返される連想配列では、元の配列の「値」がキーとなり、その値が出現した「回数」が値として格納されます。 基本構文 array_count_values(array $array): array パラメータ array(必須)− 値の出現回数を集計したい対象の配列を指定します。 戻り値 array_count_values()関数は連想配列を返します。この連想配列のキーには元の配列の各値が、値にはそれぞれの出現回数が格納されます。なお、この関数で集計できるのは文字

  2. PHPのarray()関数とは?配列の作成方法をわかりやすく解説

    PHPのarray()関数は、配列を作成するための関数です。PHPにおける配列には、主に以下の3種類が存在します。インデックス配列 − 数値インデックス(0から始まる番号)で要素を管理する配列連想配列 − 文字列などの名前付きキーで要素を管理する配列多次元配列 − 配列の中に1つ以上の配列を含む、入れ子構造の配列構文// 数値インデックスを持つ配列(インデックス配列) array(value1, value2, ...); // 名前付きキーを持つ配列(連想配列) array(key1 => value1, key2 => value2, ...)パラメータvalue − 配列に