【PHP】共通のキーの多い二種の配列を共通項と差分に振り分ける

  • 2021年5月20日
  • PHP

 共通項の多い別々のものをまとめて表示したい時があります。こういった時は共通部分と差分を振り分けて、それを操作すると楽です。これを PHP でやるテンプレートは次です

<?php

    $import = [
        'import_id' => 3,
        'user_id' => 1,
        'comment' => 'インポートのコメント',
        'import_spec' => 'test_import',
    ];
    $export = [
        'export_id' => 12,
        'userId' => 1,
        'comment' => 'エクスポートのコメント',
        'export_spec' => 'test_export',
    ];
    // array_intersect_key は渡された配列すべてに共通するキーのみを持つ配列を返します
    // この配列中の各要素の値は第一引数中の値です。
    // @see https://www.php.net/manual/ja/function.array-intersect-key.php
    if('共通項にはインポート側の値を入れるならば'){
        $common = array_intersect_key($import, $export);// 共通項の内インポート側だけを残す
    } else {
        // 共通項にはエクスポート側の値を入れるならば
        $common = array_intersect_key($export, $import);// 共通項の内エクスポート側だけを残す
    }
    // array_diff_key は渡された配列らの中で一つ目の配列にのみ存在するキーのみを持つ配列を返します
    // この配列中の各要素の値は第一引数中の値です
    // @see https://www.php.net/manual/ja/function.array-diff-key.php
    $importOnlyItems = array_diff_key($import, $common);// インポート側から共通項を除去
    $exportOnlyItems = array_diff_key($export, $common);// エクスポート側から共通項を除去
    var_dump($common,$importOnlyItems,$exportOnlyItems);
    /*
array(1) {
  ["comment"]=>
  string(30) "インポートのコメント"
}
array(3) {
  ["import_id"]=>
  int(3)
  ["user_id"]=>
  int(1)
  ["import_spec"]=>
  string(11) "test_import"
}
array(3) {
  ["export_id"]=>
  int(12)
  ["userId"]=>
  int(1)
  ["export_spec"]=>
  string(11) "test_export"
}
     */

 こんな感じで振り分けると後の処理がやりやすくなります。この方法で特に大事なのは具体的なキーの名前を参照していない点にあります。これを用いることでいちいち二つ以上の配列やらデータベース中のテーブルやらの各キーを比較することなく振り分けができ、その後のデータ構造の変更にも強くなります。

>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG