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))のハッシュ値をキーにした重複チェックなどを組み合わせるとよいでしょう。用途に応じて使い分けることで、より柔軟なデータ整形が可能になります。
-
PHPのarray_count_values()関数とは?配列内の値の出現回数を数える方法
PHPのarray_count_values()関数は、配列内に各値が何回出現するかを集計し、その結果を連想配列として返す関数です。返される連想配列では、元の配列の「値」がキーとなり、その値が出現した「回数」が値として格納されます。 基本構文 array_count_values(array $array): array パラメータ array(必須)− 値の出現回数を集計したい対象の配列を指定します。 戻り値 array_count_values()関数は連想配列を返します。この連想配列のキーには元の配列の各値が、値にはそれぞれの出現回数が格納されます。なお、この関数で集計できるのは文字
-
PHPのarray()関数とは?配列の作成方法をわかりやすく解説
PHPのarray()関数は、配列を作成するための関数です。PHPにおける配列には、主に以下の3種類が存在します。インデックス配列 − 数値インデックス(0から始まる番号)で要素を管理する配列連想配列 − 文字列などの名前付きキーで要素を管理する配列多次元配列 − 配列の中に1つ以上の配列を含む、入れ子構造の配列構文// 数値インデックスを持つ配列(インデックス配列) array(value1, value2, ...); // 名前付きキーを持つ配列(連想配列) array(key1 => value1, key2 => value2, ...)パラメータvalue − 配列に