共通項の多い別々のものをまとめて表示したい時があります。こういった時は共通部分と差分を振り分けて、それを操作すると楽です。これを 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" } */
こんな感じで振り分けると後の処理がやりやすくなります。この方法で特に大事なのは具体的なキーの名前を参照していない点にあります。これを用いることでいちいち二つ以上の配列やらデータベース中のテーブルやらの各キーを比較することなく振り分けができ、その後のデータ構造の変更にも強くなります。