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

質問編集履歴

1

自分なりに考えた方法と、手詰まりになってしまった点について追記しました。

2016/01/25 03:18

投稿

smiley-_-smiley
smiley-_-smiley

スコア26

title CHANGED
File without changes
body CHANGED
@@ -1,26 +1,83 @@
1
- 手元にはメンバーリストと所属という二種類のCSVがあります。
2
- メンバーリスト上の各所属に、対応すID振っリストを作成したいと考えていますがID一致させる方法がどうしてもわかりません
1
+ ※丸投げが過ぎとのご指摘だきましたため質問内容大幅に編集してりま大変失礼いたしました。
3
2
 
3
+ 手元にはメンバーリストと所属一覧という二種類のCSVがあります。
4
+ メンバーリスト上の所属はツリー構造をしており、同じ名称の所属名が複数使用されています。
5
+
6
+ メンバーリストの『所属1』~『所属3』に対応するIDを所属一覧のCSVから検索して、出食したいと思います。
7
+
4
8
  id, 名前, 所属1, 所属2, 所属3
5
9
 
6
10
  id, 名前, 所属1_id, 所属1, 所属2_id, 所属2, 所属3_id, 所属3
7
11
 
12
+ 単純にメンバーリスト上の所属Nと所属一覧上の所属名を比較するだけだと
13
+ 所属2や3において
14
+ 1-1>傘係>傘まとめ担当は90
15
+ 1-2>傘係>傘まとめ担当は190
16
+ 1-3>傘係>傘まとめ担当は310
17
+ をそれぞれ返してほしいのに、最初にヒットした90が返ってしまうと考えました。
8
18
 
9
- ほぼ丸投げ状態になってしまいますが、どなたかご教示いただけないでしょうか。
10
19
 
20
+ そこで所属一覧を読み込んだ後にメンバーリスト上の所属1~所属3との比較用として、以下のデータを作成して、一致するIDを取り出そうとしました。
11
21
 
22
+ (1)所属1との比較用データ:'1-1' -> 10
23
+ (2)所属1+所属2との比較用データ:'1-1|傘係' -> 40
24
+ (3)所属1+所属2+所属3との比較用データ:'1-1|傘係|傘まとめ担当' -> 90
12
25
 
13
- メンバーリストには各自の所属が記載されていますが、人によって所属1のみであったり、所属1~所属3が埋まっています。
14
26
 
15
- 所属は同じ名称も親が異なる場合は別IDが与えられていま
27
+ しかし比較用のデータを作成しようとしました段階どのようにすばいいのかわからず、手詰まりになっしまいました
16
- 例)
17
- 1-1>傘係>傘まとめ担当→90
18
- 1-2>傘係>傘まとめ担当→290
19
- IDの付与ルールに一貫性ありません。
28
+ 今回は所属1~所属3の三階層ですが、今後階層が増えることも考えられるため、再帰的にIDと親IDが一致する所属名を一番下階層から文字列を結合すればいいのかとも思いましたが、単純にループした場合(1)(2)(3)をそれぞれ作ることができませんでした
20
29
 
30
+ どなたか比較データの作成方法、もしくは考え方についてご教示いただけないでしょうか。
21
31
 
32
+
33
+ ```php
34
+ <?php
35
+ $user_filepath ="user.csv"; //ユーザー一覧
36
+ $section_filepath = "section.csv"; //所属一覧
37
+ $output_file = "output.csv";
38
+
39
+ $user_list = array();
40
+ $section_list = array();
41
+ $output = array();
42
+
43
+ //ユーザー一覧を読み込む
44
+ $user_file = new SplFileObject($user_filepath);
45
+ $user_file->setFlags(SplFileObject::READ_CSV);
46
+ $n=0; //先頭行を飛ばすためのカウンタ
47
+ foreach ($user_file as $line){
48
+ if($n>0){
49
+ $user_list[] =array(
50
+ 'id' => $line[0],
51
+ 'name' => $line[1],
52
+ 'section1' => $line[2],
53
+ 'section2' => $line[3],
54
+ 'section3' => $line[4],
55
+ );
56
+ }
57
+ $n++;
58
+ }
59
+
60
+ //所属一覧を読み込む
61
+ $section_file = new SplFileObject($section_filepath);
62
+ $section_file->setFlags(SplFileObject::READ_CSV);
63
+ $i=0; //先頭行を飛ばすためのカウンタ
64
+ foreach ($section_file as $line){
65
+ if($i>0){
66
+ $section_list[] = array(
67
+ 'id' => $line[0],
68
+ 'section_name' => $line[1],
69
+ 'parent_id' => $line[2]
70
+ );
71
+ }
72
+ }
73
+
74
+
75
+ print_r($user_list);
76
+ //print_r($section_list);
22
77
  ```
78
+
79
+ ```
23
- ●メンバー一覧
80
+ ●メンバー一覧(user.csv)
24
81
  id,名前,所属1,所属2,所属3
25
82
  1,山田太郎,1-1,傘係,傘まとめ担当
26
83
  2,田中一郎,1-1,ごみ係,ゴミ捨て担当
@@ -30,7 +87,7 @@
30
87
  ```
31
88
 
32
89
  ```
33
- 所属一覧
90
+ 所属一覧(section.csv)
34
91
  id,カテゴリー,親ID
35
92
  10,1-1,0
36
93
  20,1-2,0
@@ -38,8 +95,15 @@
38
95
  40,傘係,10
39
96
  50,ごみ係,10
40
97
  60,生き物係,10
41
- 140,体育係,
98
+ 140,体育係,10
42
99
  150,傘係,20
100
+ 160,ごみ係,20
101
+ 170,生き物係,20
102
+ 180,体育係,20
103
+ 270,傘係,30
104
+ 280,ごみ係,30
105
+ 290,生き物係,30
106
+ 300,体育係,30
43
107
  90,傘まとめ担当,40
44
108
  100,傘立て掃除担当,40
45
109
  70,ゴミ捨て担当,50
@@ -47,7 +111,52 @@
47
111
  110,エサやり担当,60
48
112
  120,水替え担当,60
49
113
  130,水槽掃除担当,60
50
- 160,傘まとめ担当,150
114
+ 190,傘まとめ担当,150
51
- 170,傘立て掃除担当,150
115
+ 200,傘立て掃除担当,150
116
+ 210,ゴミ捨て担当,160
117
+ 220,ゴミ袋交換担当,160
118
+ 230,エサやり担当,170
119
+ 240,水替え担当,170
120
+ 250,水槽掃除担当,170
121
+ 310,傘まとめ担当,270
122
+ 320,傘立て掃除担当,270
123
+ 330,ゴミ捨て担当,280
124
+ 340,ゴミ袋交換担当,280
125
+ 350,エサやり担当,290
126
+ 360,水替え担当,290
127
+ 370,水槽掃除担当,290
52
128
 
53
- ```
129
+ ```
130
+
131
+
132
+
133
+ メンバーリストには各自の所属が記載されていますが、人によって所属1のみであったり、所属1~所属3が埋まっています。
134
+
135
+ 所属は、同じ名称でも親が異なる場合は別IDが与えられています。
136
+ 例)ID_所属名
137
+ 10_1-1┬40_傘係┬90_傘まとめ担当
138
+ │ └100_傘立て掃除担当
139
+ └50_ごみ係┬70_ゴミ捨て担当
140
+ │ └80_ゴミ袋交換担当
141
+ └60_生き物係┬110_エサやり担当
142
+ │ └120_水替え担当
143
+ │ └130_水槽掃除担当
144
+ └140_体育係
145
+
146
+ 20_1-2┬150_傘係┬190_傘まとめ担当
147
+ │ └200_傘立て掃除担当
148
+ └160_ごみ係┬210_ゴミ捨て担当
149
+ │ └220_ゴミ袋交換担当
150
+ └170_生き物係┬230_エサやり担当
151
+ │ └240_水替え担当
152
+ │ └250_水槽掃除担当
153
+ └180_体育係
154
+
155
+ 30_1-3┬270_傘係┬310_傘まとめ担当
156
+ │ └320_傘立て掃除担当
157
+ └280_ごみ係┬330_ゴミ捨て担当
158
+ │ └340_ゴミ袋交換担当
159
+ └290_生き物係┬350_エサやり担当
160
+ │ └360_水替え担当
161
+ │ └370_水槽掃除担当
162
+ └300_体育係