teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

コメントより、サンプルソース改修

2017/05/29 07:57

投稿

m.ts10806
m.ts10806

スコア80888

answer CHANGED
@@ -1,5 +1,7 @@
1
1
  どのような形でもいいのならループして入れ替える方法とか。
2
2
  field内部は再帰処理利用すれば短く済みますね。
3
+
4
+ ※コメントより子fieldsのkeyは親のnameを冒頭につけるように改修。
3
5
  ```PHP
4
6
  $array_copy = array();
5
7
 
@@ -9,20 +11,25 @@
9
11
 
10
12
  var_dump($array_copy);
11
13
 
14
+ function nameToKey($rows=array(),$parent_name = null){
12
15
 
13
- function nameToKey($rows=array()){
16
+ if(!is_null($parent_name)){
17
+ $parent_name .="_";
18
+ }
14
19
 
15
20
  $row = array();
16
21
  foreach($rows as $k=>$v){
17
22
  if(is_array($v)){
23
+ foreach($v as $v_child){
18
- $row[$k] = nameToKey($v);
24
+ $row[$k][] = nameToKey($v_child,$rows["name"]);
25
+ }
19
26
  }else{
20
27
  switch($k){
21
28
  case "name":
22
29
  $row[$k] = $v;
23
30
  break;
24
31
  case "key":
25
- $row[$k] = $rows["name"];
32
+ $row[$k] = $parent_name.$rows["name"];
26
33
  break;
27
34
  }
28
35
  }

2

コメント修正。

2017/05/29 07:57

投稿

m.ts10806
m.ts10806

スコア80888

answer CHANGED
@@ -32,5 +32,3 @@
32
32
  }
33
33
 
34
34
  ```
35
-
36
- ※nameの値をkeyの値に設定する場合。keyの値をnameの値に設定したい場合は逆にしてください。

1

ソース修正・・

2017/05/29 07:03

投稿

m.ts10806
m.ts10806

スコア80888

answer CHANGED
@@ -1,4 +1,5 @@
1
- どのような形でもいいのならループして入れ替える方法とか
1
+ どのような形でもいいのならループして入れ替える方法とか
2
+ field内部は再帰処理利用すれば短く済みますね。
2
3
  ```PHP
3
4
  $array_copy = array();
4
5
 
@@ -19,11 +20,9 @@
19
20
  switch($k){
20
21
  case "name":
21
22
  $row[$k] = $v;
22
- continue;
23
23
  break;
24
24
  case "key":
25
25
  $row[$k] = $rows["name"];
26
- continue;
27
26
  break;
28
27
  }
29
28
  }