[我正在使用WordPress REST API来获取系统中的类别列表,其中包括层次结构数据,但是到目前为止,我仍无法找出将这些数据转换为关联数组的一种干净方法。
我拥有的数据看起来像这样(JSON):[
{
"id": 445,
"parent": 0,
"is_parent": true,
"count": 1364
},
{
"id": 450,
"parent": 0,
"is_parent": true,
"count": 769
},
{
"id": 641,
"parent": 0,
"is_parent": true,
"count": 5936
},
{
"id": 670,
"parent": 0,
"is_parent": true,
"count": 585
},
{
"id": 686,
"parent": 0,
"is_parent": true,
"count": 195
},
{
"id": 447,
"parent": 445,
"is_parent": true,
"count": 46
},
{
"id": 458,
"parent": 445,
"is_parent": false,
"count": 15
},
{
"id": 493,
"parent": 445,
"is_parent": false,
"count": 93
},
{
"id": 495,
"parent": 445,
"is_parent": false,
"count": 12
},
{
"id": 514,
"parent": 445,
"is_parent": false,
"count": 86
},
{
"id": 517,
"parent": 445,
"is_parent": false,
"count": 11
},
{
"id": 520,
"parent": 445,
"is_parent": false,
"count": 6
},
{
"id": 522,
"parent": 445,
"is_parent": false,
"count": 19
},
{
"id": 524,
"parent": 445,
"is_parent": false,
"count": 100
},
{
"id": 526,
"parent": 445,
"is_parent": false,
"count": 15
},
{
"id": 529,
"parent": 445,
"is_parent": true,
"count": 615
},
{
"id": 659,
"parent": 445,
"is_parent": true,
"count": 329
},
{
"id": 448,
"parent": 447,
"is_parent": false,
"count": 13
},
{
"id": 455,
"parent": 447,
"is_parent": false,
"count": 5
},
{
"id": 456,
"parent": 447,
"is_parent": false,
"count": 13
},
{
"id": 461,
"parent": 447,
"is_parent": false,
"count": 15
},
{
"id": 451,
"parent": 450,
"is_parent": true,
"count": 46
},
{
"id": 459,
"parent": 450,
"is_parent": true,
"count": 139
},
{
"id": 499,
"parent": 450,
"is_parent": true,
"count": 329
},
{
"id": 515,
"parent": 450,
"is_parent": true,
"count": 229
},
{
"id": 518,
"parent": 450,
"is_parent": true,
"count": 11
},
{
"id": 527,
"parent": 450,
"is_parent": true,
"count": 15
},
{
"id": 452,
"parent": 451,
"is_parent": true,
"count": 46
},
{
"id": 453,
"parent": 452,
"is_parent": false,
"count": 13
},
{
"id": 454,
"parent": 452,
"is_parent": false,
"count": 5
},
{
"id": 457,
"parent": 452,
"is_parent": false,
"count": 13
},
{
"id": 462,
"parent": 452,
"is_parent": false,
"count": 15
},
{
"id": 460,
"parent": 459,
"is_parent": false,
"count": 15
},
{
"id": 494,
"parent": 459,
"is_parent": false,
"count": 93
},
{
"id": 496,
"parent": 459,
"is_parent": false,
"count": 12
},
{
"id": 523,
"parent": 459,
"is_parent": false,
"count": 19
},
{
"id": 500,
"parent": 499,
"is_parent": true,
"count": 329
},
{
"id": 501,
"parent": 500,
"is_parent": false,
"count": 34
},
{
"id": 503,
"parent": 500,
"is_parent": false,
"count": 29
},
{
"id": 505,
"parent": 500,
"is_parent": false,
"count": 60
},
{
"id": 507,
"parent": 500,
"is_parent": false,
"count": 59
},
{
"id": 509,
"parent": 500,
"is_parent": false,
"count": 37
},
{
"id": 511,
"parent": 500,
"is_parent": false,
"count": 46
},
{
"id": 513,
"parent": 500,
"is_parent": false,
"count": 64
},
{
"id": 516,
"parent": 515,
"is_parent": false,
"count": 86
},
{
"id": 521,
"parent": 515,
"is_parent": false,
"count": 6
},
{
"id": 525,
"parent": 515,
"is_parent": false,
"count": 100
},
{
"id": 738,
"parent": 515,
"is_parent": false,
"count": 17
},
{
"id": 739,
"parent": 515,
"is_parent": false,
"count": 20
},
{
"id": 519,
"parent": 518,
"is_parent": false,
"count": 11
},
{
"id": 528,
"parent": 527,
"is_parent": false,
"count": 15
},
{
"id": 530,
"parent": 529,
"is_parent": false,
"count": 20
},
{
"id": 531,
"parent": 529,
"is_parent": false,
"count": 13
},
{
"id": 532,
"parent": 529,
"is_parent": false,
"count": 12
},
{
"id": 533,
"parent": 529,
"is_parent": false,
"count": 32
},
{
"id": 534,
"parent": 529,
"is_parent": false,
"count": 33
},
{
"id": 535,
"parent": 529,
"is_parent": false,
"count": 7
},
{
"id": 536,
"parent": 529,
"is_parent": false,
"count": 36
},
{
"id": 537,
"parent": 529,
"is_parent": false,
"count": 27
},
{
"id": 538,
"parent": 529,
"is_parent": false,
"count": 20
},
{
"id": 539,
"parent": 529,
"is_parent": false,
"count": 14
},
{
"id": 540,
"parent": 529,
"is_parent": false,
"count": 26
},
{
"id": 541,
"parent": 529,
"is_parent": false,
"count": 28
},
{
"id": 542,
"parent": 529,
"is_parent": false,
"count": 27
},
{
"id": 543,
"parent": 529,
"is_parent": false,
"count": 10
},
{
"id": 544,
"parent": 529,
"is_parent": false,
"count": 14
},
{
"id": 545,
"parent": 529,
"is_parent": false,
"count": 25
},
{
"id": 546,
"parent": 529,
"is_parent": false,
"count": 29
},
{
"id": 547,
"parent": 529,
"is_parent": false,
"count": 11
},
{
"id": 548,
"parent": 529,
"is_parent": false,
"count": 10
},
{
"id": 549,
"parent": 529,
"is_parent": false,
"count": 41
},
{
"id": 550,
"parent": 529,
"is_parent": false,
"count": 6
},
{
"id": 551,
"parent": 529,
"is_parent": false,
"count": 14
},
{
"id": 552,
"parent": 529,
"is_parent": false,
"count": 65
},
{
"id": 553,
"parent": 529,
"is_parent": false,
"count": 23
},
{
"id": 554,
"parent": 529,
"is_parent": false,
"count": 16
},
{
"id": 555,
"parent": 529,
"is_parent": false,
"count": 22
},
{
"id": 556,
"parent": 529,
"is_parent": false,
"count": 34
},
{
"id": 740,
"parent": 529,
"is_parent": false,
"count": 17
},
{
"id": 650,
"parent": 641,
"is_parent": true,
"count": 1735
},
{
"id": 656,
"parent": 641,
"is_parent": true,
"count": 4201
},
{
"id": 651,
"parent": 650,
"is_parent": false,
"count": 237
},
{
"id": 652,
"parent": 650,
"is_parent": false,
"count": 185
},
{
"id": 653,
"parent": 650,
"is_parent": false,
"count": 377
},
{
"id": 654,
"parent": 650,
"is_parent": false,
"count": 165
},
{
"id": 655,
"parent": 650,
"is_parent": false,
"count": 340
},
{
"id": 657,
"parent": 650,
"is_parent": false,
"count": 431
},
{
"id": 696,
"parent": 656,
"is_parent": false,
"count": 500
},
{
"id": 697,
"parent": 656,
"is_parent": false,
"count": 500
},
{
"id": 698,
"parent": 656,
"is_parent": false,
"count": 500
},
{
"id": 699,
"parent": 656,
"is_parent": false,
"count": 500
},
{
"id": 700,
"parent": 656,
"is_parent": false,
"count": 500
},
{
"id": 701,
"parent": 656,
"is_parent": false,
"count": 500
},
{
"id": 702,
"parent": 656,
"is_parent": false,
"count": 500
},
{
"id": 703,
"parent": 656,
"is_parent": false,
"count": 500
},
{
"id": 704,
"parent": 656,
"is_parent": false,
"count": 201
},
{
"id": 660,
"parent": 659,
"is_parent": false,
"count": 34
},
{
"id": 661,
"parent": 659,
"is_parent": false,
"count": 29
},
{
"id": 662,
"parent": 659,
"is_parent": false,
"count": 60
},
{
"id": 663,
"parent": 659,
"is_parent": false,
"count": 59
},
{
"id": 664,
"parent": 659,
"is_parent": false,
"count": 37
},
{
"id": 665,
"parent": 659,
"is_parent": false,
"count": 46
},
{
"id": 666,
"parent": 659,
"is_parent": false,
"count": 64
},
{
"id": 671,
"parent": 670,
"is_parent": false,
"count": 65
},
{
"id": 672,
"parent": 670,
"is_parent": false,
"count": 52
},
{
"id": 673,
"parent": 670,
"is_parent": false,
"count": 53
},
{
"id": 674,
"parent": 670,
"is_parent": false,
"count": 109
},
{
"id": 675,
"parent": 670,
"is_parent": false,
"count": 34
},
{
"id": 676,
"parent": 670,
"is_parent": false,
"count": 68
},
{
"id": 677,
"parent": 670,
"is_parent": false,
"count": 49
},
{
"id": 678,
"parent": 670,
"is_parent": false,
"count": 55
},
{
"id": 679,
"parent": 670,
"is_parent": false,
"count": 38
},
{
"id": 680,
"parent": 670,
"is_parent": false,
"count": 62
},
{
"id": 681,
"parent": 686,
"is_parent": false,
"count": 52
},
{
"id": 682,
"parent": 686,
"is_parent": false,
"count": 50
},
{
"id": 683,
"parent": 686,
"is_parent": false,
"count": 30
},
{
"id": 684,
"parent": 686,
"is_parent": false,
"count": 39
},
{
"id": 685,
"parent": 686,
"is_parent": false,
"count": 24
}
]
此数据是通过WordPress函数get_terms(array('orderby' => 'parent'))获得的。
我的目标是最终将其作为层次结构返回,从带有"parent": 0的那些条目开始,然后向下直到"is_parent"为false的对象。
我尝试仅加载parent = 0的类别,然后为每个加载其子项,然后为每个加载那些子项,依此类推,这也许可行,但我不知道一种动态递归的干净方法,用这种方式建立一个数组。
我也尝试加载所有类别,然后尝试通过array_filter和array_map对它们进行排序,但是我也找不到一种很好的方法来确保遍历每个层次结构级别的每个父级的所有子级。
我现在想到了尝试从所有这些数据构建一个关联数组的想法,从"parent": 0开始(固定),然后向下遍历,但是我有[[no idea从哪里开始。我已经看到一些有关array_walk_recursive的信息,但是在这种情况下可以使用吗?此数据的最终表示应如下所示:
{
0: [
{
445: [
{
447: [
{
448: {
...no longer a parent here...
},
455: {
...also no longer a parent...
}
]
}
],
450: [
...
],
641: [
...
]
}
]
}之所以需要这种格式,是因为我希望将其轻松显示为网页中的层次结构菜单。从后端以这种格式返回它会减少前端的工作量。
这可能吗?如果是这样,我该怎么办?