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

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

ただいまの
回答率

91.35%

  • PHP

    15175questions

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

連想配列から多次元連想配列に整形したい

受付中

回答 0

投稿 2017/12/06 11:29 ・編集 2017/12/06 13:52

  • 評価
  • クリップ 0
  • VIEW 65

iorin

score 15

前提・実現したいこと

以下の配列を

$Menu = Array
(
    [0] => Array
        (
            [Disp] => あいうえお
            [First] => 1
            [Second] => 0
            [Third] => 0
            [Fourth] => 0
            [Disp_Number] => 0
            [Screen_ID] => 
            [0] => 1000
        )

    [1] => Array
        (
            [Disp] => かきくけこ
            [First] => 1
            [Second] => 1
            [Third] => 0
            [Fourth] => 0
            [Disp_Number] => 0
            [Screen_ID] => 
            [0] => 1100
        )

    [2] => Array
        (
            [Disp] => 項目1
            [First] => 1
            [Second] => 1
            [Third] => 0
            [Fourth] => 0
            [Disp_Number] => 1
            [Screen_ID] => ../XXXXX
            [0] => 1100
        )

    [3] => Array
        (
            [Disp] => 項目2
            [First] => 1
            [Second] => 1
            [Third] => 0
            [Fourth] => 0
            [Disp_Number] => 2
            [Screen_ID] => ../XXXXX
            [0] => 1100
        )

    [4] => Array
        (
            [Disp] => 項目3
            [First] => 1
            [Second] => 1
            [Third] => 0
            [Fourth] => 0
            [Disp_Number] => 3
            [Screen_ID] => ../XXXXX
            [0] => 1100
        )

    [5] => Array
        (
            [Disp] => さしすせそ
            [First] => 1
            [Second] => 2
            [Third] => 0
            [Fourth] => 0
            [Disp_Number] => 0
            [Screen_ID] => 
            [0] => 1200
        )

    [6] => Array
        (
            [Disp] => 項目4
            [First] => 1
            [Second] => 2
            [Third] => 0
            [Fourth] => 0
            [Disp_Number] => 1
            [Screen_ID] => ../XXXXX
            [0] => 1200
        )

    [7] => Array
        (
            [Disp] => たちつてと
            [First] => 1
            [Second] => 3
            [Third] => 0
            [Fourth] => 0
            [Disp_Number] => 0
            [Screen_ID] => 
            [0] => 1300
        )

    [8] => Array
        (
            [Disp] => たちつてとの下1
            [First] => 1
            [Second] => 3
            [Third] => 1
            [Fourth] => 0
            [Disp_Number] => 0
            [Screen_ID] => 
            [0] => 1310
        )

    [9] => Array
        (
            [Disp] =>項目5
            [First] => 1
            [Second] => 3
            [Third] => 1
            [Fourth] => 0
            [Disp_Number] => 1
            [Screen_ID] => ../XXXXX
            [0] => 1310
        )

    [10] => Array
        (
            [Disp] => たちつてとの下2
            [First] => 1
            [Second] => 3
            [Third] => 2
            [Fourth] => 0
            [Disp_Number] => 0
            [Screen_ID] => 
            [0] => 1320
        )

    [11] => Array
        (
            [Disp] => 項目6
            [First] => 1
            [Second] => 3
            [Third] => 2
            [Fourth] => 0
            [Disp_Number] => 1
            [Screen_ID] => ../XXXXX
            [0] => 1320
        )

    [12] => Array
        (
            [Disp] => 項目7
            [First] => 1
            [Second] => 3
            [Third] => 2
            [Fourth] => 0
            [Disp_Number] => 2
            [Screen_ID] => ../XXXXX
            [0] => 1320
        )

    [13] => Array
        (
            [Disp] => なにぬねの
            [First] => 2
            [Second] => 0
            [Third] => 0
            [Fourth] => 0
            [Disp_Number] => 0
            [Screen_ID] => 
            [0] => 2000
        )

    [14] => Array
        (
            [Disp] => はひふへほ
            [First] => 2
            [Second] => 1
            [Third] => 0
            [Fourth] => 0
            [Disp_Number] => 0
            [Screen_ID] => 
            [0] => 2100
        )

    [15] => Array
        (
            [Disp] => 項目8
            [First] => 2
            [Second] => 1
            [Third] => 0
            [Fourth] => 0
            [Disp_Number] => 1
            [Screen_ID] => ../XXXXX
            [0] => 2100
        )

    [16] => Array
        (
            [Disp] => まみむめも
            [First] => 2
            [Second] => 2
            [Third] => 0
            [Fourth] => 0
            [Disp_Number] => 0
            [Screen_ID] => 
            [0] => 2200
        )

    [17] => Array
        (
            [Disp] => 項目9
            [First] => 2
            [Second] => 2
            [Third] => 0
            [Fourth] => 0
            [Disp_Number] => 1
            [Screen_ID] => ../XXXXX
            [0] => 2200
        )
)

以下のように整形したいです。

$Menu = array(
    "あいうえお"=>array(
        "かきくけこ"=>array(
             "項目1"=>array(
                    "Screen_ID"=>"xxxxx"
                ),
             "項目2"=>array(
                    "Screen_ID"=>"xxxxx"
                ),
        ),

        "たちつてと"=>array(
             "たちつてとの下1"=>array(
                 "項目5"=>array(
                     "Screen_ID"=>"xxxxx"
                 ),
                ),
             "たちつてとの下2"=>array(
                 "項目6"=>array(
                        "Screen_ID"=>"xxxxx"

                    ),
                 "項目7"=>array(
                        "Screen_ID"=>"xxxxx"

                    ),
                ),
        ),
    ),
    ~~以下省略
);

以下のサイトなどを参考に試していましたがなかなか理想の形になってくれず困っています。

http://tech.connehito.com/entry/2015/10/28/170312
https://qiita.com/ProjectICKX/items/76c4c210b56be39c5fa7

PHPのバージョンは5.4.22です

ヒントだけでも頂けると嬉しいです。

↓以下追記↓
まず、リンク先にあったように
use ickx\fw2\vartype\arrays\Arrays;
$result = Arrays::MultiColumn($array, ['type', 'id']);

を参考にして
use ickx\fw2\vartype\arrays\Arrays;
$result = Arrays::MultiColumn($Menu, ['First', 'Disp_Name']);
useはfunctionの外に出しておりtryの中にも入れていません

の2行と
public static function MultiColumn ($values, $keys = [], $filter = null) {
(略)
}
この関数をそのまま入れてみました。

そうすると以下の
エラーが出力され、ServerErrorで表示すら出来なくなりました。

PHP Fatal error:  Trait 'ickx\fw2\vartype\arrays\Arrays' not found in [Path] on line 6
6行目には use ickx\fw2\vartype\arrays\Arrays; を記述してあります

また、foreachで[First]が同じものを抽出し、そこから分割していってはどうかと思いましたが記述方法が思いつかず。。

親子関係の条件は以下の通りです
① [First]が「1」のものは同じグループであり[0]が「1000」のデータが親
※[First]が「2」の場合は[0]が「2000」のデータが親
② [First]が「1」かつ[Second]が1以上はデータは①の子
③ [0]に同じ値が入っているものが同じグループとなり、[Disp_Number]が「0」だと親、「1以上」だと子
※[0]が「X000」の孫
④ [First]から[Fourth]の最大値は決まっておらず、データが存在する分だけ回したい
⑤ 階層は最大で4次元連想配列である
⑥ [0]が同じデータで、かつ[Disp_Number]が1以上の場合は1を1番最初にもってきたい

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • yambejp

    2017/12/06 11:39

    それと親子関係は何をキーにおこなう前提なのでしょうか?階層ごとにロジックが違う場合はすべて条件を提示して下さい

    キャンセル

  • mts10806

    2017/12/06 11:51

    私の提示した配列そのままですが、あまり進展がないようですね・・・。kei344さんの仰るように「参考に試していましたが」ということなので、何かしらやった経過のものはあるはずです。うまくいってなくて結構なので提示してください。

    キャンセル

  • iorin

    2017/12/06 13:53

    返信が遅くなり申し訳ありません。質問内容に追記させて頂きました。

    キャンセル

まだ回答がついていません

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

ただいまの回答率

91.35%

関連した質問

  • 解決済

    2番目の最大値の求め方

    javaを学習し始めで不明な個所がありますので、質問させていただきます。 4つの数値があり、それぞれを比較し2番目の最大値を取得するプログラムを作成したいと思っています。同じ

  • 解決済

    FROM句のサブクエリについて

    前提・実現したいこと はじめまして、sqlserver 初心者です。 今サブクエリを勉強しているのですが、FROM句だけは別名をつけてJOINしなければならないので難しいです。

  • 解決済

    Swift リストから値を取り出す。(ガチャ的なもの)

    リストを作って、その一つ一つに確率を決め、それをランダムで取り出してくるというプログラムを作りたいのですが、自分で調べてみてもわからないので、教えてください。

  • 解決済

    複数のカラムにある数値の合計を計算した上でcountする

    複数のカラムにある数値の合計を計算した上でcountするにはどう修正すればよろしいでしょうか。 テーブルにはそれぞれ数値のカラムが三つありまして、三つ目はNULLの場合があります

  • 受付中

    PHP配列の重複を調べるには

    2つの配列を比較して重複しているものを調べたいのですが上手くいきません。 配列のキーに"id"・"map"・"date"があり、"id"・"map"のキーの値を比較して重複し

  • 解決済

    ある楽天市場の商品ページ(PCページ)のレイアウトの修正をしたい

    ある楽天市場の商品ページ(PCページ)のレイアウトの修正をしたいと思っております。 たとえば、 商品ページ下部にある「このショップの人気商品ランキング」を 商品ページ上部

  • 解決済

    javascriptのローカル変数について

    javascriptのローカル変数についてエラーが解けません。 問題は以下の通りです。 function returnAllArgs() { var argsA

  • 解決済

    JFrameでのJPanelの切り替えについて

    前提・実現したいこと (例)Java(UIはJFrame)でゲームを作っているのですが、JPanelの切り替えをJFrameで行おうとしています。 しかし、JPanelの切り替

同じタグがついた質問を見る

  • PHP

    15175questions

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