質問編集履歴
1
H27\.10\.18 15:30 追記
title
CHANGED
File without changes
|
body
CHANGED
@@ -83,15 +83,9 @@
|
|
83
83
|
"folder": false,
|
84
84
|
"url": "https://twitter.com/"
|
85
85
|
},
|
86
|
-
|
86
|
+
・
|
87
|
-
"id": 487,
|
88
|
-
"parent_id": 482,
|
89
|
-
"title": "Qiita",
|
90
|
-
"detail": "",
|
91
|
-
"reg_date": "2016/10/18 11:57:14",
|
92
|
-
"folder": false,
|
93
|
-
"url": "https://qiita.com/"
|
94
|
-
|
87
|
+
・
|
88
|
+
・
|
95
89
|
]
|
96
90
|
},
|
97
91
|
{
|
@@ -111,23 +105,9 @@
|
|
111
105
|
}
|
112
106
|
]
|
113
107
|
},
|
114
|
-
|
108
|
+
・
|
115
|
-
"id": 484,
|
116
|
-
"parent_id": 483,
|
117
|
-
"title": "フォルダ2",
|
118
|
-
"folder": true,
|
119
|
-
"bookmark": [
|
120
|
-
|
109
|
+
・
|
121
|
-
"id": 489,
|
122
|
-
"parent_id": 484,
|
123
|
-
"title": "teratail【テラテイル】|思考するエンジニアのためのQAプラットフォーム",
|
124
|
-
"detail": "",
|
125
|
-
"reg_date": "2016/10/18 11:59:04",
|
126
|
-
"folder": false,
|
127
|
-
"url": "https://teratail.com/"
|
128
|
-
|
110
|
+
・
|
129
|
-
]
|
130
|
-
}
|
131
111
|
]
|
132
112
|
}
|
133
113
|
|
@@ -136,7 +116,164 @@
|
|
136
116
|
このようなツリー構造を持つJSONとして返すというものになります.
|
137
117
|
JSONが持つIDは,DBから持ってきたIDで,Parent_IDは親ノードのIDとなります.
|
138
118
|
|
119
|
+
|
120
|
+
```PHP
|
121
|
+
//ブックマークをフォルダ毎に纏める
|
122
|
+
foreach ($bookmarks as $b) {
|
123
|
+
if ($tmpTags === $b['tags']) {
|
124
|
+
continue;
|
125
|
+
}
|
126
|
+
|
127
|
+
$tmpTags = $b['tags'];
|
128
|
+
$i++;
|
129
|
+
|
130
|
+
foreach ($bookmarks as $bookmark) {
|
131
|
+
if ($bookmark['tags'] === $tmpTags) {
|
132
|
+
$bookmarkItems[$i][] = $bookmark;
|
133
|
+
}
|
134
|
+
}
|
135
|
+
}
|
136
|
+
|
137
|
+
//フォルダにIDを付与
|
138
|
+
foreach ($bookmarkItems as $bookmarkItem) {
|
139
|
+
$tags = explode(',', $bookmarkItem[0]['tags']);
|
140
|
+
|
141
|
+
foreach ($tags as $tag) {
|
142
|
+
if (!isset($tagLists[0])) {
|
143
|
+
$tagLists[] = [
|
144
|
+
'tag' => $tag,
|
145
|
+
'id' => $id,
|
146
|
+
];
|
147
|
+
$id++;
|
148
|
+
} else {
|
149
|
+
for ($j = 0; $j < count($tagLists); $j++) {
|
150
|
+
if ($tag === $tagLists[$j]['tag']) {
|
151
|
+
$isFind = true;
|
152
|
+
break;
|
153
|
+
}
|
154
|
+
$isFind = false;
|
155
|
+
}
|
156
|
+
|
157
|
+
if (!$isFind) {
|
158
|
+
$tagLists[] = [
|
159
|
+
'tag' => $tag,
|
160
|
+
'id' => $id,
|
161
|
+
];
|
162
|
+
|
163
|
+
$id++;
|
164
|
+
}
|
165
|
+
}
|
166
|
+
}
|
167
|
+
}
|
168
|
+
|
169
|
+
//['bookmark']に含まれるノードにParentIDを付与する
|
170
|
+
foreach ($bookmarkItems as $bookmarkItem) {
|
171
|
+
$tags = explode(',', $bookmarkItem[0]['tags']);
|
172
|
+
$end = end($tags);
|
173
|
+
foreach ($tags as $tag) {
|
174
|
+
if ($tag === $end) {
|
175
|
+
@$tagPrevValue = $tags[(count($tags) - 2)];
|
176
|
+
|
177
|
+
if (!is_null($tagPrevValue)) {
|
178
|
+
foreach ($tagLists as $tagList) {
|
179
|
+
if ($tagList['tag'] === $tagPrevValue) {
|
180
|
+
$tagPrevId = $tagList['id'];
|
181
|
+
}
|
182
|
+
}
|
183
|
+
|
184
|
+
for ($i = 0; $i < count($tagLists); $i++) {
|
185
|
+
if ($tagLists[$i]['tag'] === $tag) {
|
186
|
+
$tagLists[$i]['parent_id'] = $tagPrevId;
|
187
|
+
}
|
188
|
+
}
|
189
|
+
} else {
|
190
|
+
for ($i = 0; $i < count($tagLists); $i++) {
|
191
|
+
if ($tagLists[$i]['tag'] === $tag) {
|
192
|
+
$tagLists[$i]['parent_id'] = null;
|
193
|
+
}
|
194
|
+
}
|
195
|
+
}
|
196
|
+
}
|
197
|
+
}
|
198
|
+
}
|
199
|
+
|
139
|
-
|
200
|
+
//タグの空白要素を消す
|
201
|
+
foreach ($tagLists as $tagList) {
|
202
|
+
if ($tagList['tag'] === '') {
|
203
|
+
unset($tagLists[$tagList['id'] - 1]);
|
204
|
+
}
|
205
|
+
}
|
206
|
+
|
207
|
+
//Folder = trueをもつノードを格納する
|
208
|
+
foreach ($tagLists as $tagList) {
|
209
|
+
$tagListItems[] = [
|
210
|
+
'id' => $tagList['id'],
|
211
|
+
'parent_id' => $tagList['parent_id'],
|
212
|
+
'title' => $tagList['tag'],
|
213
|
+
'folder' => true
|
214
|
+
];
|
215
|
+
}
|
216
|
+
|
217
|
+
$bookmarkJson['bookmark'] = $tagListItems;
|
218
|
+
|
219
|
+
//先に入れたフォルダに対応するノードをParent_IDを付与して纏める
|
220
|
+
foreach ($bookmarkItems as $bookmarkItem) {
|
221
|
+
$tags = explode(',', $bookmarkItem[0]['tags']);
|
222
|
+
|
223
|
+
foreach ($tags as $tag) {
|
224
|
+
if ($tag === end($tags)) {
|
225
|
+
if ($bookmarkItem[0]['tags'] !== '') {
|
226
|
+
if (strstr($bookmarkItem[0]['tags'], $tag)) {
|
227
|
+
foreach ($bookmarkItem as $item) {
|
228
|
+
foreach ($tagLists as $tagList) {
|
229
|
+
if ($tagList['tag'] === $tag) {
|
230
|
+
$parent_id = $tagList['id'];
|
231
|
+
}
|
232
|
+
}
|
233
|
+
|
234
|
+
$bookmarkItemAfter[] = [
|
235
|
+
'id' => $id,
|
236
|
+
'parent_id' => $parent_id,
|
237
|
+
'title' => $item['title'],
|
238
|
+
'detail' => $item['note'],
|
239
|
+
'reg_date' => $item['time'],
|
240
|
+
'folder' => false,
|
241
|
+
'url' => $item['uri']
|
242
|
+
];
|
243
|
+
|
244
|
+
for ($i = 0; $i < count($bookmarkJson['bookmark']); $i++) {
|
245
|
+
if ($bookmarkJson['bookmark'][$i]['title'] === $tag) {
|
246
|
+
$bookmarkJson['bookmark'][$i]['bookmark'] = $bookmarkItemAfter;
|
247
|
+
$id++;
|
248
|
+
}
|
249
|
+
}
|
250
|
+
}
|
251
|
+
unset($bookmarkItemAfter);
|
252
|
+
}
|
253
|
+
} else { //tag(フォルダ)情報を持っていなかった場合にはParentIDをNULLにして格納
|
254
|
+
foreach ($bookmarkItem as $item) {
|
255
|
+
$bookmarkItemAfter = [
|
256
|
+
'id' => $id,
|
257
|
+
'parent_id' => null,
|
258
|
+
'title' => $item['title'],
|
259
|
+
'detail' => $item['note'],
|
260
|
+
'reg_date' => $item['time'],
|
261
|
+
'folder' => false,
|
262
|
+
'url' => $item['uri']
|
263
|
+
];
|
264
|
+
|
265
|
+
array_push($bookmarkJson['bookmark'], $bookmarkItemAfter);
|
266
|
+
$id++;
|
267
|
+
}
|
268
|
+
unset($bookmarkItemAfter);
|
269
|
+
}
|
270
|
+
}
|
271
|
+
}
|
272
|
+
}
|
273
|
+
return $bookmarkJson;
|
274
|
+
```
|
275
|
+
|
276
|
+
現在,上記コードで実現はできているのですが,可読性が皆無なので,スッキリさせる方法があれば教えていただけると幸いです.
|
140
277
|
よろしくお願いいたします.
|
141
278
|
|
142
279
|
###補足情報(言語/FW/ツール等のバージョンなど)
|