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

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

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

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

Q&A

解決済

2回答

6534閲覧

多次元配列を全て一次元配列へ整形。ロジック作れますか?

earnest_gay

総合スコア615

PHP

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

0グッド

0クリップ

投稿2016/12/21 15:18

編集2016/12/21 15:53

やや挑戦的なタイトルですが
あれば便利だなぁと思った内容を課題として質問します。

一次元の配列もあれば
二次元の配列もあり
三次元の配列もあり、
配列構造がバラバラの配列があります。

$arr0 = array( "テスト", "TEST" => "てすと", array( "山田", "TEST" => "てすと", "PS4" => "FF" ), "ゲーム" => "PSP", "クワガタ", "日本" => array( "関東" => "東京", "神奈川", "九州" => "福岡", ) ); $arr1 = array( "COMMON_ID" => "9000000007", "SHOP_CD" => "", "MAIN_SHOP_FLG" =>"1", "CLASS_CD" =>"", "CLASS_TYPE" =>"01", "ENTER_SHOP_DATE" =>"20061101", "MAIN_FLAG" =>"1", "IMPORT_FLG" =>"0" ); $arr2 = array( "COMMON_ID" => "9000000017", "SHOP_CD" => "", "MAIN_SHOP_FLG" =>"1", "CLASS_CD" =>"", "CLASS_TYPE" =>"01", "ENTER_SHOP_DATE" =>"20061101", "MAIN_FLAG" =>"1", "IMPORT_FLG" =>"0" ); $arr = array( "映画", "テレビ" => "アクオス", $arr0, $arr1, $arr2);

こうなります。

array(5) { [0]=> string(6) "映画" ["テレビ"]=> string(12) "アクオス" [1]=> array(6) { [0]=> string(9) "テスト" ["TEST"]=> string(9) "てすと" [1]=> array(3) { [0]=> string(6) "山田" ["TEST"]=> string(9) "てすと" ["PS4"]=> string(2) "FF" } ["ゲーム"]=> string(3) "PSP" [2]=> string(12) "クワガタ" ["日本"]=> array(3) { ["関東"]=> string(6) "東京" [0]=> string(9) "神奈川" ["九州"]=> string(6) "福岡" } } [2]=> array(8) { ["COMMON_ID"]=> string(10) "9000000007" ["SHOP_CD"]=> string(0) "" ["MAIN_SHOP_FLG"]=> string(1) "1" ["CLASS_CD"]=> string(0) "" ["CLASS_TYPE"]=> string(2) "01" ["ENTER_SHOP_DATE"]=> string(8) "20061101" ["MAIN_FLAG"]=> string(1) "1" ["IMPORT_FLG"]=> string(1) "0" } [3]=> array(8) { ["COMMON_ID"]=> string(10) "9000000017" ["SHOP_CD"]=> string(0) "" ["MAIN_SHOP_FLG"]=> string(1) "1" ["CLASS_CD"]=> string(0) "" ["CLASS_TYPE"]=> string(2) "01" ["ENTER_SHOP_DATE"]=> string(8) "20061101" ["MAIN_FLAG"]=> string(1) "1" ["IMPORT_FLG"]=> string(1) "0" } }

これを全て1次元配列に整形するメソッドを作りなさい。
メソッドの引数は1つのみとします。
一次配列に整形したとき、添え字は設定されているものを維持していなければなりません。

可能であれば何次元の配列であろうと(20次元や100次元)全て一次元に整形するものを作れるのが望ましいですが、本課題では三次元配列まで整形できれば良いものとします。


作りかけのメソッド

public function log_push($msg, $endNunber=null, $arr=null) { if($this->cfg_set['DEBUG_MODE_PUSH']) { //表示形式:テストモード foreach ($arr as $key => $value) { if(is_array($value)) { //二次配列のキーを取得したいが二次配列の1つ目のキーしか取得できない echo key($value)."<br>"; } else { $result[] = $value; } } $this->var_dumpre($result); echo "******************************************"; //受け取った配列 $this->var_dumpre($arr); } else { ////表示形式:ノーマルモード } }

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

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

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

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

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

guest

回答2

0

課題のように見受けられるのでヒントだけ。

・再帰関数で処理する
・キー・バリューのセットを新しい配列にセット
・全ての処理を行って結果を返す

投稿2016/12/21 15:22

編集2016/12/21 15:31
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

earnest_gay

2016/12/21 15:43

foreachだけで作れますかね。。。?
退会済みユーザー

退会済みユーザー

2016/12/21 15:45

やってみればいいんじゃないですかね? 自分は提示したアプローチでやるのが、定番だと思いますが。
退会済みユーザー

退会済みユーザー

2016/12/21 16:06

なんか、タイトルと実際にやりたい内容にあっていませんね…
guest

0

ベストアンサー

  1. is_array関数で変数が配列かどうか確かめる。
  2. $valueが配列だったときはarray_関数を実行、array_merge関数で配列を結合して、$array_resultに代入する。
  3. $valueが配列ではなかったら$array_result[$key]に$valueを代入する。

PHP

1<?php 2$arr0 = array( 3 "テスト", 4 "TEST" => "てすと", 5 array( 6 "山田", 7 "TEST" => "てすと", 8 "PS4" => "FF" 9 ), 10 "ゲーム" => "PSP", 11 "クワガタ", 12 "日本" => array( 13 "関東" => "東京", 14 "神奈川", 15 "九州" => "福岡", 16 17 ) 18); 19$arr1 = array( 20 "COMMON_ID" => "9000000007", 21 "SHOP_CD" => "", 22 "MAIN_SHOP_FLG" => "1", 23 "CLASS_CD" => "", 24 "CLASS_TYPE" => "01", 25 "ENTER_SHOP_DATE" => "20061101", 26 "MAIN_FLAG" => "1", 27 "IMPORT_FLG" => "0" 28); 29 30$arr2 = array( 31 "COMMON_ID" => "9000000017", 32 "SHOP_CD" => "", 33 "MAIN_SHOP_FLG" => "1", 34 "CLASS_CD" => "", 35 "CLASS_TYPE" => "01", 36 "ENTER_SHOP_DATE" => "20061101", 37 "MAIN_FLAG" => "1", 38 "IMPORT_FLG" => "0" 39); 40 41 42$arr = array( 43 "映画", 44 "テレビ" => "アクオス", 45 $arr0, 46 $arr1, 47 $arr2 48); 49function array_($array) 50{ 51 if (!is_array($array)) { 52 return false; 53 } 54 $array_result = array(); 55 foreach ($array as $key => $value) { 56 if (is_array($value)) { 57 $array_result = array_merge($array_result, array_($value)); 58 } else { 59 $array_result[$key] = $value; 60 echo $key . "->" . $value . "<br>"; 61 } 62 } 63 return $array_result; 64} 65 66array_($arr);

やりたいことはこういうことなのでしょうか?

投稿2016/12/21 23:53

編集2016/12/21 23:54
s8_chu

総合スコア14731

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問