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

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

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

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

1059閲覧

PHP 配列操作

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2016/05/19 10:09

次のように配列が二つあります。

一つ目

PHP

1$arr = array ( 2 array ( 3 array ( 4 'hoge_id' => '1', 5 'foo_id' => '1', 6 'name' => 'A', 7 ), 8 array ( 9 'hoge_id' => '2', 10 'foo_id' => '1', 11 'name' => 'B', 12 ), 13 array ( 14 'hoge_id' => '3', 15 'foo_id' => '1', 16 'name' => 'C', 17 ), 18 ), 19 array ( 20 array ( 21 'hoge_id' => '4', 22 'foo_id' => '2', 23 'name' => 'A', 24 ), 25 array ( 26 'hoge_id' => '5', 27 'foo_id' => '2', 28 'name' => 'B', 29 ), 30 ), 31);

二つ目

PHP

1$arr2 = array( 2 array ( 3 'foo_id' => '1', 4 'name' => 'PHP', 5 ), 6 array ( 7 'foo_id' => '2', 8 'name' => 'Ruby', 9 ), 10);

一つ目の配列は、foo_idが同じ値でまとめています。

最終的にこの二つの配列を一つに結合したいと思っています。

求める結果は以下の形です。

PHP

1$arr3 = array( 2 array ( 3 'foo_id' => '1', 4 'name' => 'PHP', 5 array ( 6 array ( 7 'hoge_id' => '1', 8 'foo_id' => '1', 9 'name' => 'A', 10 ), 11 array ( 12 'hoge_id' => '2', 13 'foo_id' => '1', 14 'name' => 'B', 15 ), 16 array ( 17 'hoge_id' => '3', 18 'foo_id' => '1', 19 'name' => 'C', 20 ), 21 ), 22 ), 23 array ( 24 'foo_id' => '2', 25 'name' => 'Ruby', 26 array ( 27 array ( 28 'hoge_id' => '4', 29 'foo_id' => '2', 30 'name' => 'A', 31 ), 32 array ( 33 'hoge_id' => '5', 34 'foo_id' => '2', 35 'name' => 'B', 36 ), 37 ), 38 ), 39);

上記のように、一つ目の配列「foo_id」の値と、二つ目の配列「foo_id」でまとめたいです。

配列の操作がまだ勉強不足のため、こちらでヒントがもらえればと存じます。

宜しくお願い致します。

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

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

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

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

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

kei344

2016/05/19 10:23

ご自身で書かれたコードを質問文に追記いただいたほうが回答を得られやすいと思います。
退会済みユーザー

退会済みユーザー

2016/05/19 10:33

ご指摘ありがとうございます。 修正してみます。
guest

回答2

0

ベストアンサー

こんな感じですかねぇ。

PHP

1$arr3 = $arr2; 2foreach( $arr as $key => $val ){ 3 foreach( $arr3 as $key3 => $val3 ){ 4 if( $val[0]['foo_id'] == $val3['foo_id'] ){ 5 $arr3[$key3]['data'] = $val; 6 } 7 } 8} 9

投稿2016/05/19 23:56

ttyp03

総合スコア16998

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

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

退会済みユーザー

退会済みユーザー

2016/05/23 12:24

ありがとうございます。 頂いたコードを元に作り直してみました! 新たに配列を作成してforeachしてましたが、参照渡しにして実装できました!
guest

0

こんにちは

深くなったのと、綺麗じゃないので不細工ですがこんな感じにやれば希望の結果に近くなるんじゃないでしょうか?

もしかしたらいい感じの関数があるのかもしれませんが。。。。
ヒント程度に。。

php

1$temp = array(); 2foreach($arr as $d => $val){ 3 foreach ($val as $e) { 4 array_push($temp,$e); 5 } 6} 7$temp2 = array(); 8$arr3 = array(); 9foreach ($arr2 as $a) { 10 $temp2 = []; 11 foreach ($temp as $t) { 12 if($a['foo_id'] == $t['foo_id']){ 13 array_push($temp2, $t); 14 } 15 } 16 $a['list'] = array(); 17 array_push($a['list'],$temp2); 18 array_push($arr3,$a); 19} 20var_dump($arr3);

投稿2016/05/19 11:33

kogure

総合スコア299

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

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

退会済みユーザー

退会済みユーザー

2016/05/23 12:22

ありがとうございます! 上記コードで無事に実装できました! 配列が深くなったので少し改善してみますね!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問