PHP traverse category subcategory tree array into a custom 2D array

不问归期 提交于 2019-12-13 04:13:15

问题


I have an parent child array similar to this:

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
        )

    [120] => Array
        (
            [category_id] => 121
            [category_name] => Outerwear
            [parent_id] => 35
            [level] => 3
        )

    [121] => Array
        (
            [category_id] => 122
            [category_name] => Coats & Jackets
            [parent_id] => 121
            [level] => 4
        )

    [122] => Array
        (
            [category_id] => 123
            [category_name] => Camisoles & Tank Tops
            [parent_id] => 55
            [level] => 4
        )

    [123] => Array
        (
            [category_id] => 124
            [category_name] => Skirts
            [parent_id] => 35
            [level] => 3
        )

    [124] => Array
        (
            [category_id] => 125
            [category_name] => Fleece Jackets
            [parent_id] => 122
            [level] => 5
        )

    [125] => Array
        (
            [category_id] => 126
            [category_name] => Khaki & Chino Pants
            [parent_id] => 36
            [level] => 4
        )

    [126] => Array
        (
            [category_id] => 127
            [category_name] => Cargo Pants
            [parent_id] => 36
            [level] => 4
        )

    [127] => Array
        (
            [category_id] => 128
            [category_name] => Hats
            [parent_id] => 25
            [level] => 3
        )

    [128] => Array
        (
            [category_id] => 129
            [category_name] => Beanies
            [parent_id] => 128
            [level] => 4
        )

    [129] => Array
        (
            [category_id] => 130
            [category_name] => Gloves & Mittens
            [parent_id] => 25
            [level] => 3
        )

    [130] => Array
        (
            [category_id] => 131
            [category_name] => Scarves & Shawls
            [parent_id] => 17
            [level] => 3
        )

    [131] => Array
        (
            [category_id] => 132
            [category_name] => Pants
            [parent_id] => 6
            [level] => 3
        )

    [132] => Array
        (
            [category_id] => 133
            [category_name] => Khaki & Chino Pants
            [parent_id] => 132
            [level] => 4
        )

    [133] => Array
        (
            [category_id] => 134
            [category_name] => Tote Handbags
            [parent_id] => 69
            [level] => 4
        )

    [134] => Array
        (
            [category_id] => 135
            [category_name] => Camisoles & Tank Tops
            [parent_id] => 8
            [level] => 4
        )

    [135] => Array
        (
            [category_id] => 136
            [category_name] => Jeans
            [parent_id] => 132
            [level] => 4
        )

    [136] => Array
        (
            [category_id] => 137
            [category_name] => Sweaters & Cardigans
            [parent_id] => 8
            [level] => 4
        )

    [137] => Array
        (
            [category_id] => 138
            [category_name] => Cargo Pants
            [parent_id] => 132
            [level] => 4
        )

    [138] => Array
        (
            [category_id] => 139
            [category_name] => Beanies
            [parent_id] => 18
            [level] => 4
        )

    [139] => Array
        (
            [category_id] => 140
            [category_name] => Parasols & Rain Umbrellas
            [parent_id] => 1
            [level] => 2
        )

    [140] => Array
        (
            [category_id] => 141
            [category_name] => Lanyards
            [parent_id] => 41
            [level] => 3
        )

    [141] => Array
        (
            [category_id] => 142
            [category_name] => Cross-Body Handbags
            [parent_id] => 69
            [level] => 4
        )

    [142] => Array
        (
            [category_id] => 143
            [category_name] => Khaki & Chino Trousers
            [parent_id] => 13
            [level] => 4
        )

    [143] => Array
        (
            [category_id] => 144
            [category_name] => Underwear
            [parent_id] => 21
            [level] => 4
        )

)

How to convert this array similar to this:

Array
(
    [0] => Array
        (
            [0] => Home & Garden
            [1] => Kitchen & Dining
            [2] => Food & Beverage Carriers
            [3] => Flasks
            [4] => 
        )

    [1] => Array
        (
            [0] => 
            [1] => 
            [2] => 
            [3] => Canteens
            [4] => 
        )

    [2] => Array
        (
            [0] => 
            [1] => 
            [2] => Barware
            [3] => Drink Shakers & Tools
            [4] => Bottle Openers
        )

    [3] => Array
        (
            [0] => 
            [1] => 
            [2] => Tableware
            [3] => Drinkware
            [4] => Mugs
        )

    [4] => Array
        (
            [0] => 
            [1] => Parasols & Umbrellas
            [2] => 
            [3] => 
            [4] => 
        )

    [5] => Array
        (
            [0] => 
            [1] => Parasols & Rain Umbrellas
            [2] => 
            [3] => 
            [4] => 
        )

    [6] => Array
        (
            [0] => Clothing & Accessories
            [1] => Clothing
            [2] => Shorts
            [3] => Cargo Shorts 
            [4] => 
        )

)

Parent child representation for reference:

Any Ideas???


回答1:


Very interesting task. See my solution below:

categories array

$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,
        ),

);

code

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);


来源:https://stackoverflow.com/questions/28341981/php-traverse-category-subcategory-tree-array-into-a-custom-2d-array

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!