PHPの配列連結についての質問になります。
'name'の値が同じとき'post_arr'を連結し、違うときは外側に連結したいです。
###具体例
まず下記(例1)は同じ'name'なので、'post_arr'を連結して$resultとしたいです。
(例1)
php
1$new_wrapper = [ 2 [ 3 'name' => 'nameA', 4 'post_arr' => [ ['id'=>3,'type'=>'c'] ], 5 ], 6]; 7 8$leave_wrapper = [ 9 [ 10 'name' => 'nameA', 11 'post_arr' => [ ['id'=>1,'type'=>'a'] ], 12 ], 13]; 14 15$result = [ 16 [ 17 'name' => 'nameA', 18 'post_arr' => [ ['id'=>1,'type'=>'a'], ['id'=>3,'type'=>'c'] ], 19 ], 20];
そして下記(例2)は違う'name'なので、外側に連結して$resultとしたいです。
(例2)
php
1$new_wrapper = [ 2 [ 3 'name' => 'nameC', 4 'post_arr' => [ ['id'=>3,'type'=>'c'] ], 5 ], 6]; 7 8$leave_wrapper = [ 9 [ 10 'name' => 'nameA', 11 'post_arr' => [ ['id'=>1,'type'=>'a'] ], 12 ], 13]; 14 15$result = [ 16 [ 17 'name' => 'nameA', 18 'post_arr' => [ ['id'=>1,'type'=>'a'] ], 19 ], 20 [ 21 'name' => 'nameC', 22 'post_arr' => [ ['id'=>3,'type'=>'c'] ], 23 ], 24];
###ソースコード
上のような連結を実現したいと思っていて、それが下記コードのmy_marge()という関数ですが、何も取得できなくなってしまいました。
foreachでのループのあたりが怪しいと思うのですが…、どうすれば上のような連結ができるようになりますでしょうか。
php
1<?php 2// 新しく追加する配列 3$new_wrapper = [ 4 [ 5 'name' => 'nameC', 6 'post_arr' => [ ['id'=>3,'type'=>'c'] ], 7 ], 8 [ 9 'name' => 'nameD', 10 'post_arr' => [ ['id'=>4,'type'=>'d'] ], 11 ], 12]; 13 14// 最終的な配列 15$result = my_marge( $new_wrapper ); 16var_dump( $result ); 17 18// 最終的な配列を取得 19function my_marge( $new_wrapper ){ 20 $result = []; 21 22 // 現在の配列 23 $leave_wrapper = [ 24 [ 25 'name' => 'nameA', 26 'post_arr' => [ ['id'=>1,'type'=>'a'] ], 27 ], 28 [ 29 'name' => 'nameB', 30 'post_arr' => [ ['id'=>2,'type'=>'b'] ], 31 ], 32 ]; 33 34 foreach( $leave_wrapper as $leave ){ 35 $leave_name = $leave['name']; 36 $leave_post_arr = $leave['post_arr']; 37 38 foreach( $new_wrapper as $new ){ 39 $new_name = $new['name']; 40 $new_post_arr = $new['post_arr']; 41 42 // nameが同じならpost_arrを連結 43 if( $new_name == $leave_name ){ 44 foreach( $new_post_arr as $new_post ){ 45 $leave['post_arr'][] = $new_post; 46 } 47 } 48 49 // nameが違うなら外側に連結 50 else{ 51 array_merge( $leave_wrapper, $new_wrapper ); 52 exit(); 53 } 54 } 55 } 56 57 return $leave_wrapper; 58} 59
回答3件
あなたの回答
tips
プレビュー