$test_data内のargsとdefaultsをマージしてcorrectにしたいです。
1つ目、2つ目、3つ目の全てを満たすような関数を作りたいです。
再帰処理を利用して条件を分けて、2つ目の配列のマージまで作る関数は作れました!
しかし、3つ目の配列でうまくマージが出来ません。。
どなたかご教授お願いできませんでしょうか?
サンプルコード
https://paiza.io/projects/iVXnX5iPK28mRZb8eqxGWA?language=php
完全なコード
PHP
1<?php 2$test_data = array( 3 // 1つ目 同じキーがあったらそのまま 4 array( 5 'args' => array( 6 'key' => 'a', 7 ), 8 'defaults' => array( 9 'key' => 'b', 10 ), 11 'correct' => array( 12 'key' => 'a', 13 ), 14 ), 15 // 2つ目 連想配列 順番はdefaultsに合わせる 16 array( 17 'args' => array( 18 'string' => 'a', 19 'array_1' => array( 20 'array_1_1' => array( 21 'array_key_1_1' => 'array_value_1_1', 22 'array_key_1_2' => 'array_value_1_2', 23 ), 24 ), 25 ), 26 'defaults' => array( 27 'string' => 'b', 28 'array_1' => array( 29 'array_0_1' => array( 30 'array_key_0_1' => 'array_value_0_1', 31 'array_key_0_2' => 'array_value_0_1', 32 ), 33 'array_1_1' => array( 34 'array_key_1_1' => 'array_value_defaults_1_1', 35 'array_key_1_2' => 'array_value_defaults_1_2', 36 ), 37 'array_2_1' => array( 38 'array_key_2_1' => 'array_value_2_1', 39 'array_key_2_2' => 'array_value_2_2', 40 ), 41 ), 42 ), 43 'correct' => array( 44 'string' => 'a', 45 'array_1' => array( 46 'array_0_1' => array( 47 'array_key_0_1' => 'array_value_0_1', 48 'array_key_0_2' => 'array_value_0_1', 49 ), 50 'array_1_1' => array( 51 'array_key_1_1' => 'array_value_1_1', 52 'array_key_1_2' => 'array_value_1_2', 53 ), 54 'array_2_1' => array( 55 'array_key_2_1' => 'array_value_2_1', 56 'array_key_2_2' => 'array_value_2_2', 57 ), 58 ), 59 ), 60 ), 61 // 3つ目 配列の中に配列 62 array( 63 'args' => array( 64 'array_key' => array( 65 array( 66 'array_key_1' => 'array_value_1_1', 67 'array_key_2' => 'array_value_1_2', 68 'array_key_3' => 'array_value_1_3', 69 ), 70 array( 71 'array_key_1' => 'array_value_2_1', 72 'array_key_2' => 'array_value_2_2', 73 'array_key_3' => 'array_value_2_3', 74 ), 75 ), 76 ), 77 'defaults' => array( 78 'array_key' => array( 79 array( 80 'array_key_1' => 'array_defaults_value_1_1', 81 'array_key_2' => 'array_defaults_value_1_2', 82 'array_key_3' => 'array_defaults_value_1_3', 83 ), 84 ), 85 ), 86 'correct' => array( 87 'array_key' => array( 88 array( 89 'array_key_1' => 'array_value_1_1', 90 'array_key_2' => 'array_value_1_2', 91 'array_key_3' => 'array_value_1_3', 92 ), 93 array( 94 'array_key_1' => 'array_value_2_1', 95 'array_key_2' => 'array_value_2_2', 96 'array_key_3' => 'array_value_2_3', 97 ), 98 ), 99 ), 100 ), 101); 102// マージする関数 103function my_merge_func($a, $b) { 104 $merged = $b; 105 foreach($a as $key => $value) { 106 if( !is_array($value) && array_key_exists( $key, $b ) ) { 107 $merged[$key] = $value; 108 } else if( is_array($value) && is_array($b[$key])) { 109 $merged[$key] = my_merge_func($value, $b[$key]); 110 } 111 } 112 return $merged; 113} 114 115foreach ( $test_data as $test_value ) { 116 $return = my_merge_func($test_value['args'],$test_value['defaults']); 117 var_dump($return); 118 var_dump($return === $test_value['correct']); 119}
エラーメッセージ
PHP Warning: Undefined array key 1 in /workspace/Main.php on line 108
が出ます
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/09/16 12:53