【问题标题】:PHP traverse category subcategory tree array into a custom 2D arrayPHP将分类子分类树数组遍历成自定义二维数组
【发布时间】:2015-02-05 10:49:03
【问题描述】:

我有一个类似这样的父子数组:

数组
(
    [0] => 数组
        (
            [category_id] => 1
            [category_name] => 家居和花园
            [parent_id] => 0
            [等级] => 1
        )

    [1] => 数组
        (
            [category_id] => 2
            [category_name] => 厨房和餐厅
            [parent_id] => 1
            [等级] => 2
        )

    [2] => 数组
        (
            [category_id] => 3
            [category_name] => 食品和饮料运输商
            [parent_id] => 2
            [等级] => 3
        )

    [3] => 数组
        (
            [category_id] => 4
            [category_name] => 烧瓶
            [parent_id] => 3
            [等级] => 4
        )

    [4] => 数组
        (
            [category_id] => 5
            [category_name] => 服装和配饰
            [parent_id] => 0
            [等级] => 1
        )

    [5] => 数组
        (
            [category_id] => 6
            [category_name] => 服装
            [parent_id] => 5
            [等级] => 2
        )

    [6] => 数组
        (
            [category_id] => 7
            [category_name] => 短裤
            [parent_id] => 6
            [等级] => 3
        )

    [7] => 数组
        (
            [category_id] => 8
            [category_name] => 衬衫和上衣
            [parent_id] => 6
            [等级] => 3
        )

    [8] => 数组
        (
            [category_id] => 9
            [category_name] => 套头衫和开衫
            [parent_id] => 8
            [等级] => 4
        )

    [9] => 数组
        (
            [category_id] => 10
            [category_name] => T 恤
            [parent_id] => 8
            [等级] => 4
        )

    [10] => 数组
        (
            [category_id] => 11
            [category_name] => 裙子
            [parent_id] => 6
            [等级] => 3
        )

    [11] => 数组
        (
            [category_id] => 12
            [category_name] => 衬衫和衬衫
            [parent_id] => 8
            [等级] => 4
        )

    [12] => 数组
        (
            [category_id] => 13
            [category_name] => 裤子和牛仔裤
            [parent_id] => 6
            [等级] => 3
        )

    [13] => 数组
        (
            [category_id] => 14
            [category_name] => 奇诺斯
            [parent_id] => 13
            [等级] => 4
        )

    [14] => 数组
        (
            [category_id] => 15
            [category_name] => 上衣
            [parent_id] => 6
            [等级] => 3
        )

    [15] => 数组
        (
            [category_id] => 16
            [category_name] => 运动衫
            [parent_id] => 8
            [等级] => 4
        )

    [16] => 数组
        (
            [category_id] => 17
            [category_name] => 服装配饰
            [parent_id] => 5
            [等级] => 2
        )

    [17] => 数组
        (
            [category_id] => 18
            [category_name] => 帽子
            [parent_id] => 17
            [等级] => 3
        )

    [18] => 数组
        (
            [category_id] => 19
            [category_name] => 衬衫
            [parent_id] => 15
            [等级] => 4
        )

    [19] => 数组
        (
            [category_id] => 20
            [category_name] => 工装裤
            [parent_id] => 13
            [等级] => 4
        )

    [20] => 数组
        (
            [category_id] => 21
            [category_name] => 内衣和袜子
            [parent_id] => 6
            [等级] => 3
        )

    [21] => 数组
        (
            [category_id] => 22
            [category_name] => 袜子
            [parent_id] => 21
            [等级] => 4
        )

    [22] => 数组
        (
            [category_id] => 23
            [category_name] => Polo 衫
            [parent_id] => 8
            [等级] => 4
        )

    [23] => 数组
        (
            [category_id] => 24
            [category_name] => 服装和配饰
            [parent_id] => 0
            [等级] => 1
        )

    [24] => 数组
        (
            [category_id] => 25
            [category_name] => 服装配饰
            [parent_id] => 24
            [等级] => 2
        )

    [25] => 数组
        (
            [category_id] => 26
            [category_name] => 腰带
            [parent_id] => 25
            [等级] => 3
        )

    [26] => 数组
        (
            [category_id] => 27
            [category_name] => 手套和连指手套
            [parent_id] => 17
            [等级] => 3
        )

    [27] => 数组
        (
            [category_id] => 28
            [category_name] => 手套
            [parent_id] => 27
            [等级] => 4
        )

    [28] => 数组
        (
            [category_id] => 29
            [category_name] => 鞋子
            [parent_id] => 24
            [等级] => 2
        )

    [29] => 数组
        (
            [category_id] => 30
            [category_name] => 凉鞋
            [parent_id] => 29
            [等级] => 3
        )

    [30] => 数组
        (
            [category_id] => 31
            [category_name] => 丁字裤和人字拖
            [parent_id] => 30
            [等级] => 4
        )

    [31] => 数组
        (
            [category_id] => 32
            [category_name] => 行李箱包
            [parent_id] => 0
            [等级] => 1
        )

    [32] => 数组
        (
            [category_id] => 33
            [category_name] => 邮差包
            [parent_id] => 32
            [等级] => 2
        )

    [33] => 数组
        (
            [category_id] => 34
            [category_name] => 牛仔裤
            [parent_id] => 13
            [等级] => 4
        )

    [34] => 数组
        (
            [category_id] => 35
            [category_name] => 服装
            [parent_id] => 24
            [等级] => 2
        )

    [35] => 数组
        (
            [category_id] => 36
            [category_name] => 裤子
            [parent_id] => 35
            [等级] => 3
        )

    [36] => 数组
        (
            [category_id] => 37
            [category_name] => 牛仔裤
            [parent_id] => 36
            [等级] => 4
        )

    [37] => 数组
        (
            [category_id] => 38
            [category_name] => 手袋、钱包和箱子
            [parent_id] => 5
            [等级] => 2
        )

    [38] => 数组
        (
            [category_id] => 39
            [category_name] => 钱包和钱夹
            [parent_id] => 38
            [等级] => 3
        )

    [39] => 数组
        (
            [category_id] => 40
            [category_name] => 棒球帽
            [parent_id] => 18
            [等级] => 4
        )

    [40] => 数组
        (
            [category_id] => 41
            [category_name] => 手提包和钱包配件
            [parent_id] => 5
            [等级] => 2
        )

    [41] => 数组
        (
            [category_id] => 42
            [category_name] => 钥匙链
            [parent_id] => 41
            [等级] => 3
        )

    [42] => 数组
        (
            [category_id] => 43
            [category_name] => 鞋子
            [parent_id] => 5
            [等级] => 2
        )

    [43] => 数组
        (
            [category_id] => 44
            [category_name] => 靴子
            [parent_id] => 43
            [等级] => 3
        )

    [44] => 数组
        (
            [category_id] => 45
            [category_name] => 防水靴和威灵顿鞋
            [parent_id] => 44
            [等级] => 4
        )

    [45] => 数组
        (
            [category_id] => 46
            [category_name] => 酒具
            [parent_id] => 2
            [等级] => 3
        )

    [46] => 数组
        (
            [category_id] => 47
            [category_name] => 饮料瓶和工具
            [parent_id] => 46
            [等级] => 4
        )

    [47] => 数组
        (
            [category_id] => 48
            [category_name] => 开瓶器
            [parent_id] => 47
            [等级] => 5
        )

    [48] => 数组
        (
            [category_id] => 49
            [category_name] => 餐具
            [parent_id] => 2
            [等级] => 3
        )

    [49] => 数组
        (
            [category_id] => 50
            [category_name] => 酒具
            [parent_id] => 49
            [等级] => 4
        )

    [50] => 数组
        (
            [category_id] => 51
            [category_name] => 马克杯
            [parent_id] => 50
            [等级] => 5
        )

    [51] => 数组
        (
            [category_id] => 52
            [category_name] => 外套
            [parent_id] => 6
            [等级] => 3
        )

    [52] => 数组
        (
            [category_id] => 53
            [category_name] => 外套和夹克
            [parent_id] => 52
            [等级] => 4
        )

    [53] => 数组
        (
            [category_id] => 54
            [category_name] => 羽绒服
            [parent_id] => 53
            [等级] => 5
        )

    [54] => 数组
        (
            [category_id] => 55
            [category_name] => 衬衫和上衣
            [parent_id] => 35
            [等级] => 3
        )

    [55] => 数组
        (
            [category_id] => 56
            [category_name] => T 恤
            [parent_id] => 55
            [等级] => 4
        )

    [56] => 数组
        (
            [category_id] => 57
            [category_name] => T 恤
            [parent_id] => 15
            [等级] => 4
        )

    [57] => 数组
        (
            [category_id] => 58
            [category_name] => 凉鞋
            [parent_id] => 43
            [等级] => 3
        )

    [58] => 数组
        (
            [category_id] => 59
            [category_name] => 丁字裤和人字拖
            [parent_id] => 58
            [等级] => 4
        )

    [59] => 数组
        (
            [category_id] => 60
            [category_name] => 腰带
            [parent_id] => 17
            [等级] => 3
        )

    [60] => 数组
        (
            [category_id] => 61
            [category_name] => 工装短裤
            [parent_id] => 7
            [等级] => 4
        )

    [61] => 数组
        (
            [category_id] => 62
            [category_name] => 套头衫和开衫
            [parent_id] => 15
            [等级] => 4
        )

    [62] => 数组
        (
            [category_id] => 63
            [category_name] => 化妆品和洗漱包
            [parent_id] => 32
            [等级] => 2
        )

    [63] => 数组
        (
            [category_id] => 64
            [category_name] => 运动服
            [parent_id] => 35
            [等级] => 3
        )

    [64] => 数组
        (
            [category_id] => 65
            [category_name] => 运动衫
            [parent_id] => 64
            [等级] => 4
        )

    [65] => 数组
        (
            [category_id] => 66
            [category_name] => 太阳帽
            [parent_id] => 18
            [等级] => 4
        )

    [66] => 数组
        (
            [category_id] => 67
            [category_name] => 抓绒夹克
            [parent_id] => 53
            [等级] => 5
        )

    [67] => 数组
        (
            [category_id] => 68
            [category_name] => 马甲
            [parent_id] => 52
            [等级] => 4
        )

    [68] => 数组
        (
            [category_id] => 69
            [category_name] => 手袋
            [parent_id] => 38
            [等级] => 3
        )

    [69] => 数组
        (
            [category_id] => 70
            [category_name] => 手提袋和购物袋
            [parent_id] => 69
            [等级] => 4
        )

    [70] => 数组
        (
            [category_id] => 71
            [category_name] => 户外鞋
            [parent_id] => 29
            [等级] => 3
        )

    [71] => 数组
        (
            [category_id] => 72
            [category_name] => 水鞋
            [parent_id] => 71
            [等级] => 4
        )

    [72] => 数组
        (
            [category_id] => 73
            [category_name] => 背包
            [parent_id] => 32
            [等级] => 2
        )

    [73] => 数组
        (
            [category_id] => 74
            [category_name] => 衬衫和衬衫
            [parent_id] => 55
            [等级] => 4
        )

    [74] => 数组
        (
            [category_id] => 75
            [category_name] => 围巾和围巾
            [parent_id] => 17
            [等级] => 3
        )

    [75] => 数组
        (
            [category_id] => 76
            [category_name] => 手提箱
            [parent_id] => 32
            [等级] => 2
        )

    [76] => 数组
        (
            [category_id] => 77
            [category_name] => 手提行李
            [parent_id] => 76
            [等级] => 3
        )

    [77] => 数组
        (
            [category_id] => 78
            [category_name] => 背心和背心
            [parent_id] => 8
            [等级] => 4
        )

    [78] => 数组
        (
            [category_id] => 79
            [category_name] => 阳伞和雨伞
            [parent_id] => 1
            [等级] => 2
        )

    [79] => 数组
        (
            [category_id] => 80
            [category_name] => 随身行李
            [parent_id] => 76
            [等级] => 3
        )

    [80] => 数组
        (
            [category_id] => 81
            [category_name] => 连衣裙
            [parent_id] => 6
            [等级] => 3
        )

    [81] => 数组
        (
            [category_id] => 82
            [category_name] => 日装
            [parent_id] => 81
            [等级] => 4
        )

    [82] => 数组
        (
            [category_id] => 83
            [category_name] => 工装裤
            [parent_id] => 13
            [等级] => 4
        )

    [83] => 数组
        (
            [category_id] => 84
            [category_name] => 手提行李
            [parent_id] => 32
            [等级] => 2
        )

    [84] => 数组
        (
            [category_id] => 85
            [category_name] => 单肩包
            [parent_id] => 69
            [等级] => 4
        )

    [85] => 数组
        (
            [category_id] => 86
            [category_name] => 百慕大短裤
            [parent_id] => 7
            [等级] => 4
        )

    [86] => 数组
        (
            [category_id] => 87
            [category_name] => 短裤
            [parent_id] => 35
            [等级] => 3
        )

    [87] => 数组
        (
            [category_id] => 88
            [category_name] => 工装短裤
            [parent_id] => 87
            [等级] => 4
        )

    [88] => 数组
        (
            [category_id] => 89
            [category_name] => 裤子
            [parent_id] => 6
            [等级] => 3
        )

    [89] => 数组
        (
            [category_id] => 90
            [category_name] => 休闲裤
            [parent_id] => 89
            [等级] => 4
        )

    [90] => 数组
        (
            [category_id] => 91
            [category_name] => 手提包和钱包配件
            [parent_id] => 24
            [等级] => 2
        )

    [91] => 数组
        (
            [category_id] => 92
            [category_name] => 挂绳
            [parent_id] => 91
            [等级] => 3
        )

    [92] => 数组
        (
            [category_id] => 93
            [category_name] => 行李袋
            [parent_id] => 32
            [等级] => 2
        )

    [93] => 数组
        (
            [category_id] => 94
            [category_name] => Polo 衫
            [parent_id] => 15
            [等级] => 4
        )

    [94] => 数组
        (
            [category_id] => 95
            [category_name] => 短裤
            [parent_id] => 6
            [等级] => 3
        )

    [95] => 数组
        (
            [category_id] => 96
            [category_name] => 休闲夹克
            [parent_id] => 53
            [等级] => 5
        )

    [96] => 数组
        (
            [category_id] => 97
            [category_name] => 打底裤
            [parent_id] => 89
            [等级] => 4
        )

    [97] => 数组
        (
            [category_id] => 98
            [category_name] => 食堂
            [parent_id] => 3
            [等级] => 4
        )

    [98] => 数组
        (
            [category_id] => 99
            [category_name] => 大写
            [parent_id] => 18
            [等级] => 4
        )

    [99] => 数组
        (
            [category_id] => 100
            [category_name] => 棒球帽
            [parent_id] => 99
            [等级] => 5
        )

    [100] => 数组
        (
            [category_id] => 101
            [category_name] => 雨具
            [parent_id] => 52
            [等级] => 4
        )

    [101] => 数组
        (
            [category_id] => 102
            [category_name] => 防水外套
            [parent_id] => 101
            [等级] => 5
        )

    [102] => 数组
        (
            [category_id] => 103
            [category_name] => 披风和披风
            [parent_id] => 53
            [等级] => 5
        )

    [103] => 数组
        (
            [category_id] => 104
            [category_name] => 运动衫
            [parent_id] => 15
            [等级] => 4
        )

    [104] => 数组
        (
            [category_id] => 105
            [category_name] => 户外鞋
            [parent_id] => 43
            [等级] => 3
        )

    [105] => 数组
        (
            [category_id] => 106
            [category_name] => 水鞋
            [parent_id] => 105
            [等级] => 4
        )

    [106] => 数组
        (
            [category_id] => 107
            [category_name] => Polo 衫
            [parent_id] => 55
            [等级] => 4
        )

    [107] => 数组
        (
            [category_id] => 108
            [category_name] => 连衣裙
            [parent_id] => 35
            [等级] => 3
        )

    [108] => 数组
        (
            [category_id] => 109
            [category_name] => 日装
            [parent_id] => 108
            [等级] => 4
        )

    [109] => 数组
        (
            [category_id] => 110
            [category_name] => 毛衣和开衫
            [parent_id] => 55
            [等级] => 4
        )

    [110] => 数组
        (
            [类别 ID] => 111
            [category_name] => 购物袋
            [parent_id] => 32
            [等级] => 2
        )

    [111] => 数组
        (
            [类别 ID] => 112
            [category_name] => 运动衫
            [parent_id] => 55
            [等级] => 4
        )

    [112] => 数组
        (
            [类别 ID] => 113
            [category_name] => 围巾和披肩
            [parent_id] => 25
            [等级] => 3
        )

    [113] => 数组
        (
            [category_id] => 114
            [category_name] => 手袋、钱包和箱子
            [parent_id] => 24
            [等级] => 2
        )

    [114] => 数组
        (
            [category_id] => 115
            [category_name] => 手袋
            [parent_id] => 114
            [等级] => 3
        )

    [115] => 数组
        (
            [类别 ID] => 116
            [category_name] => 手提包
            [parent_id] => 115
            [等级] => 4
        )

    [116] => 数组
        (
            [类别 ID] => 117
            [category_name] => 内衣和袜子
            [parent_id] => 35
            [等级] => 3
        )

    [117] => 数组
        (
            [category_id] => 118
            [category_name] => 袜子
            [parent_id] => 117
            [等级] => 4
        )

    [118] => 数组
        (
            [类别 ID] => 119
            [category_name] => 斜挎包
            [parent_id] => 115
            [等级] => 4
        )

    [119] => 数组
        (
            [category_id] => 120
            [category_name] => 内衣
            [parent_id] => 117
            [等级] => 4
        )

    [120] => 数组
        (
            [category_id] => 121
            [category_name] => 外套
            [parent_id] => 35
            [等级] => 3
        )

    [121] => 数组
        (
            [category_id] => 122
            [category_name] => 外套和夹克
            [parent_id] => 121
            [等级] => 4
        )

    [122] => 数组
        (
            [类别 ID] => 123
            [category_name] => 吊带背心和背心
            [parent_id] => 55
            [等级] => 4
        )

    [123] => 数组
        (
            [category_id] => 124
            [category_name] => 裙子
            [parent_id] => 35
            [等级] => 3
        )

    [124] => 数组
        (
            [类别 ID] => 125
            [category_name] => 抓绒夹克
            [parent_id] => 122
            [等级] => 5
        )

    [125] => 数组
        (
            [类别 ID] => 126
            [category_name] => 卡其色和奇诺裤
            [parent_id] => 36
            [等级] => 4
        )

    [126] => 数组
        (
            [类别 ID] => 127
            [category_name] => 工装裤
            [parent_id] => 36
            [等级] => 4
        )

    [127] => 数组
        (
            [category_id] => 128
            [category_name] => 帽子
            [parent_id] => 25
            [等级] => 3
        )

    [128] => 数组
        (
            [类别 ID] => 129
            [category_name] => 豆豆
            [parent_id] => 128
            [等级] => 4
        )

    [129] => 数组
        (
            [category_id] => 130
            [category_name] => 手套和连指手套
            [parent_id] => 25
            [等级] => 3
        )

    [130] => 数组
        (
            [类别 ID] => 131
            [category_name] => 围巾和披肩
            [parent_id] => 17
            [等级] => 3
        )

    [131] => 数组
        (
            [类别 ID] => 132
            [category_name] => 裤子
            [parent_id] => 6
            [等级] => 3
        )

    [132] => 数组
        (
            [类别 ID] => 133
            [category_name] => 卡其色和奇诺裤
            [parent_id] => 132
            [等级] => 4
        )

    [133] => 数组
        (
            [类别 ID] => 134
            [category_name] => 手提包
            [parent_id] => 69
            [等级] => 4
        )

    [134] => 数组
        (
            [类别 ID] => 135
            [category_name] => 吊带背心和背心
            [parent_id] => 8
            [等级] => 4
        )

    [135] => 数组
        (
            [类别 ID] => 136
            [category_name] => 牛仔裤
            [parent_id] => 132
            [等级] => 4
        )

    [136] => 数组
        (
            [类别 ID] => 137
            [category_name] => 毛衣和开衫
            [parent_id] => 8
            [等级] => 4
        )

    [137] => 数组
        (
            [类别 ID] => 138
            [category_name] => 工装裤
            [parent_id] => 132
            [等级] => 4
        )

    [138] => 数组
        (
            [类别 ID] => 139
            [category_name] => 豆豆
            [parent_id] => 18
            [等级] => 4
        )

    [139] => 数组
        (
            [category_id] => 140
            [category_name] => 阳伞和雨伞
            [parent_id] => 1
            [等级] => 2
        )

    [140] => 数组
        (
            [类别 ID] => 141
            [category_name] => 挂绳
            [parent_id] => 41
            [等级] => 3
        )

    [141] => 数组
        (
            [类别 ID] => 142
            [category_name] => 斜挎包
            [parent_id] => 69
            [等级] => 4
        )

    [142] => 数组
        (
            [类别 ID] => 143
            [category_name] => 卡其色和奇诺裤
            [parent_id] => 13
            [等级] => 4
        )

    [143] => 数组
        (
            [category_id] => 144
            [category_name] => 内衣
            [parent_id] => 21
            [等级] => 4
        )

)

如何将这个数组转换成类似这样:

大批 ( [0] => 数组 ( [0] => 家居与园艺 [1] => 厨房和餐厅 [2] => 食品和饮料运输商 [3] => 烧瓶 [4] => ) [1] => 数组 ( [0] => [1] => [2] => [3] => 食堂 [4] => ) [2] => 数组 ( [0] => [1] => [2] => 酒具 [3] => 饮料瓶和工具 [4] => 开瓶器 ) [3] => 数组 ( [0] => [1] => [2] => 餐具 [3] => 酒具 [4] => 马克杯 ) [4] => 数组 ( [0] => [1] => 阳伞和雨伞 [2] => [3] => [4] => ) [5] => 数组 ( [0] => [1] => 阳伞和雨伞 [2] => [3] => [4] => ) [6] => 数组 ( [0] => 服装和配饰 [1] => 服装 [2] => 短裤 [3] => 工装短裤 [4] => ) )

父子表示供参考:

有什么想法???

【问题讨论】:

  • 你能解释一下什么是父ID吗?是类别ID?如果是 fo,你能显示你的类别 ID 吗?
  • 嗨,是的 parent_id 是 category_id。我已经用 category_id 更新了数组,请检查并告诉我
  • 如果我的代码适合你,请告诉我

标签: php arrays recursion tree tree-traversal


【解决方案1】:

非常有趣的任务。请参阅下面的解决方案:

类别数组

$categoriesrRaw = Array
(
    '0' => Array
        (
            'category_id' => 1,
            'category_name' => 'Home & Garden',
            'parent_id' => 0,
            'level' => 1,
        ),

    '1' => Array
        (
            'category_id' => 2,
            'category_name' => 'Kitchen & Dining',
            'parent_id' => 1,
            'level' => 2,
        ),

    '2' => Array
        (
            'category_id' => 3,
            'category_name' => 'Food & Beverage Carriers',
            'parent_id' => 2,
            'level' => 3,
        ),

    '3' => Array
        (
            'category_id' => 4,
            'category_name' => 'Flasks',
            'parent_id' => 3,
            'level' => 4,
        ),

    '4' => Array
        (
            'category_id' => 5,
            'category_name' => 'Clothing & Accessories',
            'parent_id' => 0,
            'level' => 1,
        ),

    '5' => Array
        (
            'category_id' => 6,
            'category_name' => 'Clothing',
            'parent_id' => 5,
            'level' => 2,
        ),

    '6' => Array
        (
            'category_id' => 7,
            'category_name' => 'Shorts',
            'parent_id' => 6,
            'level' => 3,
        ),

    '7' => Array
        (
            'category_id' => 8,
            'category_name' => 'Shirts & Tops',
            'parent_id' => 6,
            'level' => 3,
        ),

    '8' => Array
        (
            'category_id' => 9,
            'category_name' => 'Jumpers & Cardigans',
            'parent_id' => 8,
            'level' => 4,
        ),

    '9' => Array
        (
            'category_id' => 10,
            'category_name' => 'T-Shirts',
            'parent_id' => 8,
            'level' => 4,
        ),

    '10' => Array
        (
            'category_id' => 11,
            'category_name' => 'Skirts',
            'parent_id' => 6,
            'level' => 3,
        ),

    '11' => Array
        (
            'category_id' => 12,
            'category_name' => 'Shirts & Blouses',
            'parent_id' => 8,
            'level' => 4,
        ),

    '12' => Array
        (
            'category_id' => 13,
            'category_name' => 'Trousers & Jeans',
            'parent_id' => 6,
            'level' => 3,
        ),

    '13' => Array
        (
            'category_id' => 14,
            'category_name' => 'Chinos',
            'parent_id' => 13,
            'level' => 4,
        ),

    '14' => Array
        (
            'category_id' => 15,
            'category_name' => 'Tops',
            'parent_id' => 6,
            'level' => 3,
        ),

    '15' => Array
        (
            'category_id' => 16,
            'category_name' => 'Sweatshirts',
            'parent_id' => 8,
            'level' => 4,
        ),

    '16' => Array
        (
            'category_id' => 17,
            'category_name' => 'Clothing Accessories',
            'parent_id' => 5,
            'level' => 2,
        ),

    '17' => Array
        (
            'category_id' => 18,
            'category_name' => 'Hats',
            'parent_id' => 17,
            'level' => 3,
        ),

    '18' => Array
        (
            'category_id' => 19,
            'category_name' => 'Shirts',
            'parent_id' => 15,
            'level' => 4,
        ),

    '19' => Array
        (
            'category_id' => 20,
            'category_name' => 'Cargo Trousers',
            'parent_id' => 13,
            'level' => 4,
        ),

    '20' => Array
        (
            'category_id' => 21,
            'category_name' => 'Underwear & Socks',
            'parent_id' => 6,
            'level' => 3,
        ),

    '21' => Array
        (
            'category_id' => 22,
            'category_name' => 'Socks',
            'parent_id' => 21,
            'level' => 4,
        ),

    '22' => Array
        (
            'category_id' => 23,
            'category_name' => 'Polo Shirts',
            'parent_id' => 8,
            'level' => 4,
        ),

    '23' => Array
        (
            'category_id' => 24,
            'category_name' => 'Apparel & Accessories',
            'parent_id' => 0,
            'level' => 1,
        ),

    '24' => Array
        (
            'category_id' => 25,
            'category_name' => 'Clothing Accessories',
            'parent_id' => 24,
            'level' => 2,
        ),

    '25' => Array
        (
            'category_id' => 26,
            'category_name' => 'Belts',
            'parent_id' => 25,
            'level' => 3,
        ),

    '26' => Array
        (
            'category_id' => 27,
            'category_name' => 'Gloves & Mittens',
            'parent_id' => 17,
            'level' => 3,
        ),

    '27' => Array
        (
            'category_id' => 28,
            'category_name' => 'Gloves',
            'parent_id' => 27,
            'level' => 4,
        ),

    '28' => Array
        (
            'category_id' => 29,
            'category_name' => 'Shoes',
            'parent_id' => 24,
            'level' => 2,
        ),

    '29' => Array
        (
            'category_id' => 30,
            'category_name' => 'Sandals',
            'parent_id' => 29,
            'level' => 3,
        ),

    '30' => Array
        (
            'category_id' => 31,
            'category_name' => 'Thongs & Flip-Flops',
            'parent_id' => 30,
            'level' => 4,
        ),

    '31' => Array
        (
            'category_id' => 32,
            'category_name' => 'Luggage & Bags',
            'parent_id' => 0,
            'level' => 1,
        ),

    '32' => Array
        (
            'category_id' => 33,
            'category_name' => 'Messenger Bags',
            'parent_id' => 32,
            'level' => 2,
        ),

    '33' => Array
        (
            'category_id' => 34,
            'category_name' => 'Jeans',
            'parent_id' => 13,
            'level' => 4,
        ),

    '34' => Array
        (
            'category_id' => 35,
            'category_name' => 'Clothing',
            'parent_id' => 24,
            'level' => 2,
        ),

    '35' => Array
        (
            'category_id' => 36,
            'category_name' => 'Pants',
            'parent_id' => 35,
            'level' => 3,
        ),

    '36' => Array
        (
            'category_id' => 37,
            'category_name' => 'Jeans',
            'parent_id' => 36,
            'level' => 4,
        ),

    '37' => Array
        (
            'category_id' => 38,
            'category_name' => 'Handbags, Wallets & Cases',
            'parent_id' => 5,
            'level' => 2,
        ),

    '38' => Array
        (
            'category_id' => 39,
            'category_name' => 'Wallets & Money Clips',
            'parent_id' => 38,
            'level' => 3,
        ),

    '39' => Array
        (
            'category_id' => 40,
            'category_name' => 'Baseball Hats',
            'parent_id' => 18,
            'level' => 4,
        ),

    '40' => Array
        (
            'category_id' => 41,
            'category_name' => 'Handbag & Wallet Accessories',
            'parent_id' => 5,
            'level' => 2,
        ),

    '41' => Array
        (
            'category_id' => 42,
            'category_name' => 'Key Chains',
            'parent_id' => 41,
            'level' => 3,
        ),

    '42' => Array
        (
            'category_id' => 43,
            'category_name' => 'Shoes',
            'parent_id' => 5,
            'level' => 2,
        ),

    '43' => Array
        (
            'category_id' => 44,
            'category_name' => 'Boots',
            'parent_id' => 43,
            'level' => 3,
        ),

    '44' => Array
        (
            'category_id' => 45,
            'category_name' => 'Waterproof Boots & Wellingtons',
            'parent_id' => 44,
            'level' => 4,
        ),

    '45' => Array
        (
            'category_id' => 46,
            'category_name' => 'Barware',
            'parent_id' => 2,
            'level' => 3,
        ),

    '46' => Array
        (
            'category_id' => 47,
            'category_name' => 'Drink Shakers & Tools',
            'parent_id' => 46,
            'level' => 4,
        ),

    '47' => Array
        (
            'category_id' => 48,
            'category_name' => 'Bottle Openers',
            'parent_id' => 47,
            'level' => 5,
        ),

    '48' => Array
        (
            'category_id' => 49,
            'category_name' => 'Tableware',
            'parent_id' => 2,
            'level' => 3,
        ),

    '49' => Array
        (
            'category_id' => 50,
            'category_name' => 'Drinkware',
            'parent_id' => 49,
            'level' => 4,
        ),

    '50' => Array
        (
            'category_id' => 51,
            'category_name' => 'Mugs',
            'parent_id' => 50,
            'level' => 5,
        ),

    '51' => Array
        (
            'category_id' => 52,
            'category_name' => 'Outerwear',
            'parent_id' => 6,
            'level' => 3,
        ),

    '52' => Array
        (
            'category_id' => 53,
            'category_name' => 'Coats & Jackets',
            'parent_id' => 52,
            'level' => 4,
        ),

    '53' => Array
        (
            'category_id' => 54,
            'category_name' => 'Puffer jackets',
            'parent_id' => 53,
            'level' => 5,
        ),

    '54' => Array
        (
            'category_id' => 55,
            'category_name' => 'Shirts & Tops',
            'parent_id' => 35,
            'level' => 3,
        ),

    '55' => Array
        (
            'category_id' => 56,
            'category_name' => 'T-Shirts',
            'parent_id' => 55,
            'level' => 4,
        ),

    '56' => Array
        (
            'category_id' => 57,
            'category_name' => 'T-Shirts',
            'parent_id' => 15,
            'level' => 4,
        ),

    '57' => Array
        (
            'category_id' => 58,
            'category_name' => 'Sandals',
            'parent_id' => 43,
            'level' => 3,
        ),

    '58' => Array
        (
            'category_id' => 59,
            'category_name' => 'Thongs & Flip Flops',
            'parent_id' => 58,
            'level' => 4,
        ),

    '59' => Array
        (
            'category_id' => 60,
            'category_name' => 'Belts',
            'parent_id' => 17,
            'level' => 3,
        ),

    '60' => Array
        (
            'category_id' => 61,
            'category_name' => 'Cargo Shorts',
            'parent_id' => 7,
            'level' => 4,
        ),

    '61' => Array
        (
            'category_id' => 62,
            'category_name' => 'Jumpers & Cardigans',
            'parent_id' => 15,
            'level' => 4,
        ),

    '62' => Array
        (
            'category_id' => 63,
            'category_name' => 'Cosmetic & Toiletry Bags',
            'parent_id' => 32,
            'level' => 2,
        ),

    '63' => Array
        (
            'category_id' => 64,
            'category_name' => 'Activewear',
            'parent_id' => 35,
            'level' => 3,
        ),

    '64' => Array
        (
            'category_id' => 65,
            'category_name' => 'Sweatshirts',
            'parent_id' => 64,
            'level' => 4,
        ),

    '65' => Array
        (
            'category_id' => 66,
            'category_name' => 'Sun Hats',
            'parent_id' => 18,
            'level' => 4,
        ),

    '66' => Array
        (
            'category_id' => 67,
            'category_name' => 'Fleece Jackets',
            'parent_id' => 53,
            'level' => 5,
        ),

    '67' => Array
        (
            'category_id' => 68,
            'category_name' => 'Gilets',
            'parent_id' => 52,
            'level' => 4,
        ),

    '68' => Array
        (
            'category_id' => 69,
            'category_name' => 'Handbags',
            'parent_id' => 38,
            'level' => 3,
        ),

    '69' => Array
        (
            'category_id' => 70,
            'category_name' => 'Tote Bags & Shoppers',
            'parent_id' => 69,
            'level' => 4,
        ),

    '70' => Array
        (
            'category_id' => 71,
            'category_name' => 'Outdoor Shoes',
            'parent_id' => 29,
            'level' => 3,
        ),

    '71' => Array
        (
            'category_id' => 72,
            'category_name' => 'Water Shoes',
            'parent_id' => 71,
            'level' => 4,
        ),

    '72' => Array
        (
            'category_id' => 73,
            'category_name' => 'Backpacks',
            'parent_id' => 32,
            'level' => 2,
        ),

    '73' => Array
        (
            'category_id' => 74,
            'category_name' => 'Shirts & Blouses',
            'parent_id' => 55,
            'level' => 4,
        ),

    '74' => Array
        (
            'category_id' => 75,
            'category_name' => 'Scarves & Snoods',
            'parent_id' => 17,
            'level' => 3,
        ),

    '75' => Array
        (
            'category_id' => 76,
            'category_name' => 'Suitcases',
            'parent_id' => 32,
            'level' => 2,
        ),

    '76' => Array
        (
            'category_id' => 77,
            'category_name' => 'Hand Luggage',
            'parent_id' => 76,
            'level' => 3,
        ),

    '77' => Array
        (
            'category_id' => 78,
            'category_name' => 'Vests & Tank Tops',
            'parent_id' => 8,
            'level' => 4,
        ),

    '78' => Array
        (
            'category_id' => 79,
            'category_name' => 'Parasols & Umbrellas',
            'parent_id' => 1,
            'level' => 2,
        ),

    '79' => Array
        (
            'category_id' => 80,
            'category_name' => 'Carry-On Luggage',
            'parent_id' => 76,
            'level' => 3,
        ),

    '80' => Array
        (
            'category_id' => 81,
            'category_name' => 'Dresses',
            'parent_id' => 6,
            'level' => 3,
        ),

    '81' => Array
        (
            'category_id' => 82,
            'category_name' => 'Day Dresses',
            'parent_id' => 81,
            'level' => 4,
        ),

    '82' => Array
        (
            'category_id' => 83,
            'category_name' => 'Cargo Pants',
            'parent_id' => 13,
            'level' => 4,
        ),

    '83' => Array
        (
            'category_id' => 84,
            'category_name' => 'Hand Luggage',
            'parent_id' => 32,
            'level' => 2,
        ),

    '84' => Array
        (
            'category_id' => 85,
            'category_name' => 'Shoulder Bags',
            'parent_id' => 69,
            'level' => 4,
        ),

    '85' => Array
        (
            'category_id' => 86,
            'category_name' => 'Bermuda Shorts',
            'parent_id' => 7,
            'level' => 4,
        ),

    '86' => Array
        (
            'category_id' => 87,
            'category_name' => 'Shorts',
            'parent_id' => 35,
            'level' => 3,
        ),

    '87' => Array
        (
            'category_id' => 88,
            'category_name' => 'Cargo Shorts',
            'parent_id' => 87,
            'level' => 4,
        ),

    '88' => Array
        (
            'category_id' => 89,
            'category_name' => 'Trousers',
            'parent_id' => 6,
            'level' => 3,
        ),

    '89' => Array
        (
            'category_id' => 90,
            'category_name' => 'Casual Trousers',
            'parent_id' => 89,
            'level' => 4,
        ),

    '90' => Array
        (
            'category_id' => 91,
            'category_name' => 'Handbag & Wallet Accessories',
            'parent_id' => 24,
            'level' => 2,
        ),

    '91' => Array
        (
            'category_id' => 92,
            'category_name' => 'Lanyards',
            'parent_id' => 91,
            'level' => 3,
        ),

    '92' => Array
        (
            'category_id' => 93,
            'category_name' => 'Duffel Bags',
            'parent_id' => 32,
            'level' => 2,
        ),

    '93' => Array
        (
            'category_id' => 94,
            'category_name' => 'Polo Shirts',
            'parent_id' => 15,
            'level' => 4,
        ),

    '94' => Array
        (
            'category_id' => 95,
            'category_name' => 'Skorts',
            'parent_id' => 6,
            'level' => 3,
        ),

    '95' => Array
        (
            'category_id' => 96,
            'category_name' => 'Casual Jackets',
            'parent_id' => 53,
            'level' => 5,
        ),

    '96' => Array
        (
            'category_id' => 97,
            'category_name' => 'Leggings',
            'parent_id' => 89,
            'level' => 4,
        ),

    '97' => Array
        (
            'category_id' => 98,
            'category_name' => 'Canteens',
            'parent_id' => 3,
            'level' => 4,
        ),

    '98' => Array
        (
            'category_id' => 99,
            'category_name' => 'Caps',
            'parent_id' => 18,
            'level' => 4,
        ),

    '99' => Array
        (
            'category_id' => 100,
            'category_name' => 'Baseball Hats',
            'parent_id' => 99,
            'level' => 5,
        ),

    '100' => Array
        (
            'category_id' => 101,
            'category_name' => 'Rain Gear',
            'parent_id' => 52,
            'level' => 4,
        ),

    '101' => Array
        (
            'category_id' => 102,
            'category_name' => 'Waterproof Coats',
            'parent_id' => 101,
            'level' => 5,
        ),

    '102' => Array
        (
            'category_id' => 103,
            'category_name' => 'Capes & Ponchos',
            'parent_id' => 53,
            'level' => 5,
        ),

    '103' => Array
        (
            'category_id' => 104,
            'category_name' => 'Sweatshirts',
            'parent_id' => 15,
            'level' => 4,
        ),

    '104' => Array
        (
            'category_id' => 105,
            'category_name' => 'Outdoor Shoes',
            'parent_id' => 43,
            'level' => 3,
        ),

    '105' => Array
        (
            'category_id' => 106,
            'category_name' => 'Water Shoes',
            'parent_id' => 105,
            'level' => 4,
        ),

    '106' => Array
        (
            'category_id' => 107,
            'category_name' => 'Polo Shirts',
            'parent_id' => 55,
            'level' => 4,
        ),

    '107' => Array
        (
            'category_id' => 108,
            'category_name' => 'Dresses',
            'parent_id' => 35,
            'level' => 3,
        ),

    '108' => Array
        (
            'category_id' => 109,
            'category_name' => 'Day Dresses',
            'parent_id' => 108,
            'level' => 4,
        ),

    '109' => Array
        (
            'category_id' => 110,
            'category_name' => 'Sweaters & Cardigans',
            'parent_id' => 55,
            'level' => 4,
        ),

    '110' => Array
        (
            'category_id' => 111,
            'category_name' => 'Shopping Totes',
            'parent_id' => 32,
            'level' => 2,
        ),

    '111' => Array
        (
            'category_id' => 112,
            'category_name' => 'Sweatshirts',
            'parent_id' => 55,
            'level' => 4,
        ),

    '112' => Array
        (
            'category_id' => 113,
            'category_name' => 'Scarves & Shawls',
            'parent_id' => 25,
            'level' => 3,
        ),

    '113' => Array
        (
            'category_id' => 114,
            'category_name' => 'Handbags, Wallets & Cases',
            'parent_id' => 24,
            'level' => 2,
        ),

    '114' => Array
        (
            'category_id' => 115,
            'category_name' => 'Handbags',
            'parent_id' => 114,
            'level' => 3,
        ),

    '115' => Array
        (
            'category_id' => 116,
            'category_name' => 'Tote Handbags',
            'parent_id' => 115,
            'level' => 4,
        ),

    '116' => Array
        (
            'category_id' => 117,
            'category_name' => 'Underwear & Socks',
            'parent_id' => 35,
            'level' => 3,
        ),

    '117' => Array
        (
            'category_id' => 118,
            'category_name' => 'Socks',
            'parent_id' => 117,
            'level' => 4,
        ),

    '118' => Array
        (
            'category_id' => 119,
            'category_name' => 'Cross-Body Handbags',
            'parent_id' => 115,
            'level' => 4,
        ),

    '119' => Array
        (
            'category_id' => 120,
            'category_name' => 'Underwear',
            'parent_id' => 117,
            'level' => 4,
        ),

);

代码

function categoriesCmd($a, $b)
{
        return strnatcmp($a['path'], $b['path']);
}

// 
// sort all categories values by path. Path - it is category parent ids:
// 1
// 1/2
// 1/2/3
// 1/2/3/4
// 1/2/3/98
// 1/2/46
// 1/2/46/47
// 1/2/46/47/48
// 1/2/49
// etc
//
$maxLevel   = 0;
$categories = array();
foreach ($categoriesrRaw as $key => $category) {
    $parentId = $category['parent_id'];
    $category['path']  = array($category['category_id']);
    if ($maxLevel < $category['level']) {
        $maxLevel = $category['level'];
    }
    while ($parentId) {
        foreach ($categoriesrRaw as $item) {
            if ($item['category_id'] == $parentId) {
                $newParentId = $item['parent_id'];
                $category['path'][] = $item['category_id'];
                break;
            }
        }
        $parentId = $newParentId;
        // $category['level']++;
    }
    $category['path'] = implode('/', array_reverse($category['path']));
    $categories[]    = $category;
}
usort($categories, 'categoriesCmd');



//
// create needed array structure
//
$prev         = array_shift($categories);
$level        = 0;
$result       = array(array_fill(0, $maxLevel, ""));
$result[0][0] = $category['category_name'];
foreach ($categories as $category) {
    if ($prev['level'] >= $category['level']) {
        $level++;
        $result[$level] = array_fill(0, $maxLevel, "");
    }

    $result[$level][$category['level']-1] = $category['category_name'];
    $prev = $category;
}

print_r($result);

【讨论】:

    猜你喜欢
    • 2016-09-04
    • 2019-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多