###実現したいこと
下記の$arr
から、action
に応じて配列を追加したいのですが、なかなか目的の位置に追加できません。
php
1$arr = array( 2 array( 3 'action' => 'get', 4 'target_id' => 10, 5 'actor_id' => [87], 6 ), 7 array( 8 'action' => 'lose', 9 'target_id' => 6, 10 'actor_id' => [87,37], 11 ), 12);
ゴールは上の$arr
を下記「目的の配列」に変更することで、変更点としてはAとBの2つです。
A:action
がget
の場合だけ、target_id
に応じて、target_url
とtarget_ttl
を追加する。(これはできました。)
B:どの場合でも、actor_id
に応じて、actor_name
とactor_img
を追加する。(これができません。)
###目的の配列
php
1array ( 2 0 => 3 array ( 4 'action' => 'get', 5 'target_id' => 10, 6 'target_url' => 'url of 10', // getなので追加(できた) 7 'target_ttl' => 'title of 10', // getなので追加(できた) 8 'actor_id' => 9 array ( 10 0 => 87, 11 ), 12 'actor_name' => 13 array ( 14 0 => 'name of 87', // 常に追加(できない) 15 ), 16 'actor_img' => 17 array ( 18 0 => 'img of 87', // 常に追加(できない) 19 ), 20 21 ), 22 1 => 23 array ( 24 'action' => 'lose', 25 'target_id' => 6, 26 'actor_id' => 27 array ( 28 0 => 87, 29 1 => 37, 30 ), 31 'actor_name' => 32 array ( 33 0 => 'name of 87', // 常に追加(できない) 34 1 => 'name of 37', // 常に追加(できない) 35 ), 36 'actor_img' => 37 array ( 38 0 => 'img of 87', // 常に追加(できない) 39 1 => 'img of 37', // 常に追加(できない) 40 ), 41 ), 42)
###試したこと
下記のような関数を書いてみました。
でも、Aの追加はできたのですが、Bの追加について「目的の配列」のようになりません。あれこれ切った貼ったしてみても直せず、よろしければご協力いただけませんでしょうか。
php
1// 追加のための関数 2function get_target_data($arr){ 3 $new=[]; 4 foreach ( $arr as $a ){ 5 // getの場合だけ追加(できた) 6 if( $a['action']=='get' ){ 7 $target_url = get_url( $a['target_id'] ); 8 $target_ttl = get_ttl( $a['target_id'] ); 9 $a += array( 'target_url' => $target_url ); 10 $a += array( 'target_ttl' => $target_ttl ); 11 } 12 $new[]=$a; 13 } 14 foreach ( $arr as $a ){ 15 // 常に追加(できない) 16 foreach ( $a['actor_id'] as $actor_id ){ 17 $actor_name = get_name( $actor_id ); 18 $actor_img = get_img( $actor_id ); 19 $a['actor_id'] += array( 'actor_name' => $actor_name ); 20 $a['actor_id'] += array( 'actor_avt' => $actor_img ); 21 } 22 $new[]=$a['actor_id']; 23 } 24 return $new; 25} 26 27// 追加する値 28function get_url($v){ 29 return 'url of '.$v; 30} 31function get_ttl($v){ 32 return 'title of '.$v; 33} 34function get_name($v){ 35 return 'name of '.$v; 36} 37function get_img($v){ 38 return 'img of '.$v; 39} 40 41// 確認 42$result = get_target_data($arr); 43var_export($result); 44
このコードの見た目で素人っぽさが判断できると思いますので、僭越ながらできれば上記の素人っぽい流れに近い形でご教授いただけますとうれしく思います。
よろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/05/22 11:58
2019/05/22 14:06 編集
2019/05/22 13:51
2019/05/22 14:12 編集
2019/05/22 14:20
2019/05/22 14:31