PHP初心者です。
配列の操作についてのご質問になります。
宜しくお願い致します。
前提・実現したいこと
「$args」という配列に、「$add_args」という配列を連結したいです。
概略は次の連結で、「連結したい配列をn等分して、実現したい配列を作ること」がゴールになります。
種類 | 内容 |
---|---|
元の配列 | $args = [[1,2]]; |
連結したい配列 | $add_args = [[3,4,5]]; |
実現したい配列 | [[1,2],[3,4],[5]]; |
元の配列と、実現したい配列
元となる配列「$args」はこちらです。(余分な階層があるように見えますが気にしないでください)
php
1// 元の配列 2$args = [ 3 'menu_origin' => [ 4 [ 5 'ids' => [1,2] 6 , 'key' => 'menu_origin' 7 ] 8 ], 9];
そして最終的に実現したい配列はこちらになります。キーに「_1」や「_2」という番号が振ってあるのがポイントで、これが「連結したい配列の、いくつめのn等分か」を示します。
php
1// 実現したい配列 2[ 3 // 元の配列 4 'menu_origin' => [ 5 [ 6 'ids' => [1,2] 7 , 'name' => 'menu_origin' 8 ] 9 ], 10 // 連結したい配列 11 'menu_apple_1' => [ 12 [ 13 'ids' => [3,4] 14 , 'name' => 'menu_apple_1' 15 ] 16 ], 17 'menu_apple_2' => [ 18 [ 19 'ids' => [5] 20 , 'name' => 'menu_apple_2' 21 ] 22 ], 23];
試したこと・発生している問題
最後に連結したい配列「$add_args」と、連結のコード「get_add_args()」を掲載いたします。
こちらのコードの問題としては、実現したい配列の階層とは異なってしまうことです。
つまり「menu_origin」が一階層目なのに対して、追加された「menu_apple_1」と「menu_apple_2」が二階層目に属してしまいます。
<?php // 初期配列 $args = [ 'menu_origin' => [ [ 'ids' => [1,2] , 'name' => 'menu_origin' ] ], ]; // 連結したい $add_args = get_add_args( 2 ); $args = array_merge( $add_args, $args ); var_export( $args ); // 連結の処理 function get_add_args( $page ){ $add_args = []; $menus = ['menu_apple']; // ←他にもmenu_grapeなどいくつか入ります foreach( $menus as $menu ){ // idを分割 $ids = [3,4,5,6,7]; // ←ここは変えられません $ids_divide = array_divide( $ids, $page ); // ←n等分します // 等分されたidを使って$add_argsを作る $i=0; foreach( $ids_divide as $ids ){ $key = $menu.'_'.$i; $add_args[] = [ $key => [ [ 'ids' => $ids , 'key' => $key ] ] ]; $i++; } } return $add_args; } // 配列をn等分 function array_divide($arr, $division) { $count = ceil(count($arr) / $division); $ret = array_chunk($arr, $count); return $ret; }
そして、二階層目に属してしまうならforeachの中を下記のように変更すればいいのでは?と思ったのですが……
php
1 $add_args[] = [ 2 $key => [ 3 ] 4 ];
↓こうすればいいのでは?
php
1 $add_args[] = // ←ここにあった階層を削除してみた 2 $key => [ 3 ];
ですがこうしますと「イコールにしてくれと」次のエラーになります。
PHP Parse error: syntax error, unexpected '=>' (T_DOUBLE_ARROW)
とはいえ、イコールにすれば「menu_apple_1」と「menu_apple_2」というキーが消えてしまいますし、どうすればいいか行き詰ってしまった状況にあります。
いかにして実現したい配列ができるでしょうか。
みなさまのご指南を賜りますようお願い申し上げます。
ツールのバージョン
PHPのバージョンは最新の7.2.0になります。
回答1件
あなたの回答
tips
プレビュー