質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%

Q&A

解決済

2回答

312閲覧

【PHP】3つ以上の連想配列の結合で、keyが同じものをまとめて結合したい

kazuki____jp

総合スコア14

0グッド

0クリップ

投稿2022/01/22 01:27

php

1$a = [ 2 '1' => ['0102', '0304'], 3 '3' => ['0506', '0708'], 4 '5' => ['2526', '2728'], 5]; 6$b = [ 7 '1' => ['0910', '1112'], 8 '3' => ['1314', '1516'], 9]; 10$c = [ 11 '1' => ['1718', '1920'], 12 '3' => ['2122', '2324'], 13];

このような3つ以上の連想配列を結合し以下のような連想配列を作成したいです。
やりたいことは、結合した際に、キーが同じものは、そのキーの値の配列を結合。キーが重複しないものはそのまま。キーは変更しない。

php

1$d = [ 2 '1' => ['0102', '0304', '0910', '1112', '1718', '1920'], 3 '3' => ['0506', '0708', '1314', '1516', '2122', '2324'], 4 '5' => ['2526', '2728'], 5]

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2022/01/22 02:09

要件は分かるのですが、まず自身でやってみるところからではないでしょうか。
kazuki____jp

2022/01/22 02:17

自分なりに考えてみましたが出来そうにないので質問させていただきました。
m.ts10806

2022/01/22 02:22

その考えてみた結果と起きている問題を提示されたほうが応えやすいです。 現状だと質問ではなく作業依頼になっています。(要件しか書いてないから)
kazuki____jp

2022/01/22 03:17

「質問ではなく作業依頼」なるほど...。次から質問させていただくときに作業依頼にならないよう注意いたします。
m.ts10806

2022/01/22 03:41

質問は編集できるのでいつ来るかわからない次に回すより今からでも。
guest

回答2

0

ベストアンサー

PHP: 配列

key は、整数 または 文字列です。value には任意の型を指定できます。

さらに、次のような key のキャストが発生します。

10 進数の int として妥当な形式の String は、 数値の前に + 記号がついていない限り、int 型にキャストされます。つまり、キーに "8" を指定すると、実際には 8 として格納されるということです。

php

1$arr = [$a, $b, $c]; 2$keys = array_unique(array_merge(...array_map('array_keys', $arr))); 3$d = array_combine($keys, array_merge(array_map(function ($key) use ($arr) { 4 return array_merge(...array_column($arr, $key)); 5}, $keys))); 6 7print_r($d); 8# 9Array 10( 11 [1] => Array 12 ( 13 [0] => 0102 14 [1] => 0304 15 [2] => 0910 16 [3] => 1112 17 [4] => 1718 18 [5] => 1920 19 ) 20 21 [3] => Array 22 ( 23 [0] => 0506 24 [1] => 0708 25 [2] => 1314 26 [3] => 1516 27 [4] => 2122 28 [5] => 2324 29 ) 30 31 [5] => Array 32 ( 33 [0] => 2526 34 [1] => 2728 35 ) 36 37)

投稿2022/01/22 02:44

melian

総合スコア19825

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kazuki____jp

2022/01/22 03:18

ご回答ありがとうございます。 大変参考になりました。
guest

0

自分なりに考えてみましたが出来そうにないので

melianさんの回答のように、arrayの関数を使いこなせてなくても、
foreachを理解していれば愚直な方法で出来るはずです。
自分でもやってみましょう。

投稿2022/01/22 03:45

otn

総合スコア84645

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kazuki____jp

2022/01/23 01:59

foreachを使った例を教えていただけないでしょうか?
otn

2022/01/23 07:47

foreachを知らないと言うことでしょうか? そうであれば、まず入門書で学びましょう。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問