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

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

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

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

Q&A

解決済

2回答

3440閲覧

foreachを用いて複雑な多次元配列を作成したい

doubutsu.karada

総合スコア26

PHP

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

0グッド

0クリップ

投稿2017/08/01 11:43

編集2017/08/01 12:00

php初心者です。

php

1$studentList = [ 2 0 => '1,student,taro', 3 1 => '1,student,hanako', 4 2 => '1,student,hoge' 5];
1 => [ student => [ 0 => taro, 1 => hanako, 2 => hoge ] ]

上記のような配列$studentListをカンマで分解し多次元配列を作成したいのですが、自分が作成したループ

php

1foreach ($studentList as $key => $value) { 2 $explodedValue = explode(',', $value); 3 $arrResult = [ 4 $explodedValue[0] => [ 5 $explodedValue[1] => [$key => $explodedValue[2]] 6 ] 7 ]; 8}

では実行結果が、

1 => [ student => [ 2 => hoge ] ]

このようになってしまいます。当たり前といえば当たり前なのですが、期待する結果のような配列を作るには、どうしたらいいでしょうか?

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

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

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

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

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

guest

回答2

0

ベストアンサー

与えられる値が 数字,文字,文字 というフォーマット固定であるならば、explode() で分解した値を単純に多次元配列のキーとして使えばよいのでは?

php

1<?php 2$studentList = [ 3 '1,student,taro', 4 '1,student,hanako', 5 '1,student,hoge' 6]; 7 8$results = []; 9foreach ($studentList as $val) { 10 $arr = explode(',', $val); 11 $results[intval($arr[0])][$arr[1]][] = $arr[2]; 12} 13 14print_r($results);
Array ( [1] => Array ( [student] => Array ( [0] => taro [1] => hanako [2] => hoge ) ) )

一方で、もし例えばたまに 数字,数字,文字,文字 と階層が増えます、という場合は上記のような決め打ちの方法は使えません。そんなときは、一般的に「再帰処理」というテクニックを使います。ググるといろんなサンプルが出てくるので必要になったら調べてみて下さい。

投稿2017/08/01 12:20

miyahan

総合スコア3095

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

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

doubutsu.karada

2017/08/01 12:42

お二人とも解答ありがとうございました、非常に助かりました。 どちらのコードでも動作確認できたのですが、補足説明をしてくださったmiyahanさんをベストアンサーに致します。
guest

0

たとえばこう

PHP

1$studentList = [ 2 0 => '1,student,taro', 3 1 => '1,student,hanako', 4 2 => '1,student,hoge' 5]; 6 7$arrData=[]; 8 9foreach($studentList as $k1=>$v1){ 10 $temp=explode(",",$v1); 11 if(!isset($arrData[$temp[0]])) $arrData[$temp[0]]=[]; 12 if(!isset($arrData[$temp[0]][$temp[1]])) $arrData[$temp[0]][$temp[1]]=[]; 13 $arrData[$temp[0]][$temp[1]][$k1]=$temp[2]; 14} 15print_r($arrData); 16

投稿2017/08/01 12:07

yambejp

総合スコア114837

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問