###実現したいこと
下記$menus
から、三次元目だけの配列を作りたいです。
つまり$result = [ 'salad', 'soop', 'cake', 'beer', 'sine' ];
が目標になります。
###該当のソースコード
php
1 $menus = [ 2 'food' => [ 3 'appetizers' => [ 'salad', 'soop' ], 4 'dessert ' => [ 'cake' ] 5 ], 6 'drink' => [ 7 'liquor' => [ 'beer', 'wine' ] 8 ] 9 ];
###発生している問題
下記のget_menus( $type )
という関数で、$type
で指定した次元の配列を取得したいと思っています。
たとえば二次元目だけの取得ならば$primary = get_menus('primary');
です。
しかし三次元目を取得しようと思い$secondary = get_menus('secondary');
を書いても、なぜか実現したいような構造にならず、階層が追加されてしまうといった状況になっています。
###試したこと
こちらが問題のget_menus( $type )
です。
どうすれば三次元目も取得できるようにできますでしょうか。
php
1function get_menus( $type ){ 2 3 // 全メニュー 4 $menus = [ 5 'food' => [ 6 'appetizers' => [ 'salad', 'soop' ], 7 'dessert ' => [ 'cake' ] 8 ], 9 'drink' => [ 10 'liquor' => [ 'beer', 'wine' ] 11 ] 12 ]; 13 14 // 全て取得 15 if( $type=='all' ){ 16 $result = array_merge_recursive( $menus['food'], $menus['drink'] ); 17 } 18 19 // 二次元目だけ取得 20 if( $type=='primary' ){ 21 $result = []; 22 foreach( $menus as $menu ){ 23 foreach( $menu as $m=>$k ){ 24 $result[] = $m; 25 } 26 } 27 } 28 29 // 三次元目だけ取得 30 if( $type=='secondary' ){ 31 $result = []; 32 foreach( $menus as $menu ){ 33 foreach( $menu as $m=>$k ){ 34 $result[] = $k; // $kだけ入ってほしいのに、勝手に階層が追加されてしまう 35 } 36 } 37 } 38 39 return $result ; 40} 41 42// 二次元目はできる 43$primary= get_menus('primary'); 44var_dump( $primary); 45 46// 三次元目ができない 47$secondary = get_menus('secondary'); 48var_dump( $secondary); 49
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/09/08 06:56 編集
2019/09/08 06:59
2019/09/09 02:53 編集