Merge array with same ID - php

I have the following array
Array ( [id] => 1 [name] => [cat_name] => Food & Beverage [quantity] => 1
[price] => 25 [image] => books_image/calories_fat_carbohydrate.png )
Array ( [id] => 2 [name] => [cat_name] => Food & Beverage [quantity] => 5
[price] => 38 [image] => books_image/the_law_relating_to_food.png )
Array ( [id] => 3 [name] => [cat_name] => Food & Beverage [quantity] => 5
[price] => 19 [image] => books_image/it_starts_with_food.png )
Array ( [id] => 3 [name] => [cat_name] => Food & Beverage [quantity] => 2
[price] => 19 [image] => books_image/it_starts_with_food.png )
In a $_SESSION['cartitem'] object, and the key is id.
My problem is that i have duplicates with id=3 and my desired output would be
Array ( [id] => 1 [name] => [cat_name] => Food & Beverage [quantity] => 1
[price] => 25 [image] => books_image/calories_fat_carbohydrate.png )
Array ( [id] => 2 [name] => [cat_name] => Food & Beverage [quantity] => 5
[price] => 38 [image] => books_image/the_law_relating_to_food.png )
Array ( [id] => 3 [name] => [cat_name] => Food & Beverage [quantity] => 7
[price] => 19 [image] => books_image/it_starts_with_food.png )
Basically merging by same id and adding the quantity field. Is there an easy way to do this in php?
I dont want to remove duplicates. The duplicates to me are important since they have quantities in which i need to add them.

Here you go:
// DEFINE SORTING CRITERIA
function sort_ids($a, $b) {
return $a['id'] > $b['id'];
}
// DEFINE ARRAY OF ARRAYS
$arrays = array(
array( 'id' => 1, 'name' => '', 'cat_name' => 'Food & Beverage', 'quantity' => 1,
'price' => 25, 'image' => 'books_image/calories_fat_carbohydrate.png' ),
array( 'id' => 2, 'name' => '', 'cat_name' => 'Food & Beverage', 'quantity' => 5,
'price' => 38, 'image' => 'books_image/the_law_relating_to_food.png' ),
array( 'id' => 3, 'name' => '', 'cat_name' => 'Food & Beverage', 'quantity' => 5,
'price' => 19, 'image' => 'books_image/it_starts_with_food.png' ),
array( 'id' => 3, 'name' => '', 'cat_name' => 'Food & Beverage', 'quantity' => 2,
'price' => 19, 'image' => 'books_image/it_starts_with_food.png' ),
array( 'id' => 1, 'name' => '', 'cat_name' => 'Food & Beverage', 'quantity' => 1,
'price' => 25, 'image' => 'books_image/calories_fat_carbohydrate.png' ),
array( 'id' => 2, 'name' => '', 'cat_name' => 'Food & Beverage', 'quantity' => 5,
'price' => 38, 'image' => 'books_image/the_law_relating_to_food.png' )
);
// SORT ARRAY OF ARRAYS FIRST
usort($arrays, 'sort_ids');
// MERGE DUPLICATES
$record_number = count($arrays);
for ($i=0; $i<$record_number; $i++) {
// if this is not the first loop and if this is a duplicate
if(isset($temp_id) && $temp_id == $arrays[$i]['id']) {
// add quantity of the previous array here
$arrays[$i]['quantity'] += $temp_quantity;
// unset previous array
unset($arrays[$i-1]);
}
$temp_id = $arrays[$i]['id'];
$temp_quantity = $arrays[$i]['quantity'];
}
// PRINT ARRAY OF ARRAYS
echo '<pre>';
print_r($arrays);
echo '</pre>';

Related

Php merge two elements of an array based on some common value and add other values

I have a below array:
[product] => Array
(
[0] => Array
(
[qty] => 1
[code] => 147818
[price] => 11
[name] => Product1
)
[1] => Array
(
[qty] => 2
[code] => 147818
[price] => 11
[name] => Product1
)
[2] => Array
(
[qty] => 1
[code] => 567432
[price] => 31
[name] => Product2
)
)
I want to add quantities if the code is same. That is, I want the resulting array to be:
[product] => Array
(
[0] => Array
(
[qty] => 3
[code] => 147818
[price] => 11
[name] => Product1
)
[1] => Array
(
[qty] => 1
[code] => 567432
[price] => 31
[name] => Product2
)
)
It should merge the elements only if the code is same. How can I achieve this?
Try this code, it merge and sum the qty by code
$products = [
[
'qty' => 1,
'code' => 147818,
'price' => 11,
'name' => 'Product1'
],
[
'qty' => 2,
'code' => 147818,
'price' => 11,
'name' => 'Product1'
],
[
'qty' => 1,
'code' => 567432,
'price' => 31,
'name' => 'Product2'
],
];
$output = [];
for ($i=0; $i<count($products); $i++) {
if ($output[$products[$i]['code']]['code'] == $products[$i]['code']) {
$output[$products[$i]['code']]['qty'] += $products[$i]['qty'];
}else{
$output[$products[$i]['code']] = $products[$i];
}
}
$output = array_values($output);
print_r($output);

How would I return minimum value in Array of Std Class Objects (PHP)?

I have an array of StdClass Objects and want to return the "partner_code" with the minimum value for key "price". So for this example I would like to return partner_code "AC" as it is the partner with the lowest price. I tried using array_reduce, but I'm not sure what I'm doing wrong. Any help would be appreciated. Please note I am not looking to SORT this array. I just want to move the subarray containing AC (because it hold the lowest price) to the top - not sorting everything by price
Input Array:
Array
(
[0] => stdClass Object
(
[name] => Budget
[partner_code] => BU
[price] => 365.36
[tier] => 1
)
[1] => stdClass Object
(
[name] => Avis
[partner_code] => AV
[price] => 449.71
[tier] => 1
)
[2] => stdClass Object
(
[name] => E-Z
[partner_code] => EZ
[price] => 270.56
[tier] => 2
)
[3] => stdClass Object
(
[name] => Sixt
[partner_code] => SX
[price] => 280.52
[tier] => 2
)
[4] => stdClass Object
(
[name] => Alamo
[partner_code] => AL
[price] => 345.13
[tier] => 2
)
[5] => stdClass Object
(
[name] => Advantage
[partner_code] => AD
[price] => 357.61
[tier] => 2
)
[6] => stdClass Object
(
[name] => Enterprise
[partner_code] => ET
[price] => 364.46
[tier] => 2
)
[7] => stdClass Object
(
[name] => ACE
[partner_code] => AC
[price] => 186.53
[tier] => 3
)
[8] => stdClass Object
(
[name] => Fox
[partner_code] => FX
[price] => 265.25
[tier] => 3
)
[9] => stdClass Object
(
[name] => Payless
[partner_code] => ZA
[price] => 380.47
[tier] => 3
)
[10] => stdClass Object
(
[name] => Dollar
[partner_code] => ZR
[price] => 385.99
[tier] => 3
)
[11] => stdClass Object
(
[name] => Thrifty
[partner_code] => ZT
[price] => 385.99
[tier] => 3
)
[12] => stdClass Object
(
[name] => Silvercar
[partner_code] => SC
[price] => 424.10
[tier] => 3
)
[13] => stdClass Object
(
[name] => National
[partner_code] => NA
[price] => 448.82
[tier] => 3
)
[14] => stdClass Object
(
[name] => Hertz
[partner_code] => HZ
[price] => 487.33
[tier] => 3
)
)
Code:
array_reduce($this->results->companies, function($a,$b) {
echo "Prices: " . $a->price . "<br>";
return $a->price < $b->price ? (string)$a->partner_code : (string)$b->partner_code;
});
usort($array, function($a, $b) {
return ($a->price - $b->price) ;
});
echo $array[0]->partner_code;
If you really don't want to sort the array but instead use array_reduce, do so by reducing the array to one of its elements. Then you can get the partner_code property for that element.
For example
array_reduce($this->results->companies, function($lowest, $company) {
// $lowest will be null on the first iteration
return $lowest === null || $company->price < $lowest->price ?
$company : $lowest;
})->partner_code;
This method will not sort the entire array. It will pull out the subarray with the lowest price and set it as the first element. I could have nested some of the functions to make it more compact (1-liner), but that would have damaged readability.
Code: (Demo)
$results=[
(object)["name"=>"Budget","partner_code"=>"BU","price"=>"365.36","tier"=>"1"],
(object)["name"=>"Avis","partner_code"=>"AV","price"=>"449.71","tier"=>"1"],
(object)["name"=>"E-Z","partner_code"=>"EZ","price"=>"270.56","tier"=>"2"],
(object)["name"=>"Sixt","partner_code"=>"SX","price"=>"280.52","tier"=>"2"],
(object)["name"=>"Alamo","partner_code"=>"AL","price"=>"345.13","tier"=>"2"],
(object)["name"=>"Advantage","partner_code"=>"AD","price"=>"357.61","tier"=>"2"],
(object)["name"=>"Enterprise","partner_code"=>"ET","price"=>"364.46","tier"=>"2"],
(object)["name"=>"ACE","partner_code"=>"AC","price"=>"186.53","tier"=>"3"],
(object)["name"=>"Fox","partner_code"=>"FX","price"=>"265.25","tier"=>"3"],
(object)["name"=>"Payless","partner_code"=>"ZA","price"=>"380.47","tier"=>"3"],
(object)["name"=>"Dollar","partner_code"=>"ZR","price"=>"385.99","tier"=>"3"],
(object)["name"=>"Thrifty","partner_code"=>"ZT","price"=>"385.99","tier"=>"3"],
(object)["name"=>"Silvercar","partner_code"=>"SC","price"=>"424.10","tier"=>"3"],
(object)["name"=>"National","partner_code"=>"NA","price"=>"448.82","tier"=>"3"],
(object)["name"=>"Hertz","partner_code"=>"HZ","price"=>"487.33","tier"=>"3"]
];
$min=min(array_column($results,'price')); // find the minimum value
$index=array_search($min,array_column($results,'price')); // find the index of the subarray containing min value
$pulled=array_splice($results,$index,1); // extract the subarray and preserve it as $pulled
$new_results=array_merge($pulled,$results); // set $pulled as first element
var_export($new_results);
...okay, okay, here's the one-liner:
var_export(array_merge(array_splice($results,array_search(min(array_column($results,'price')),array_column($results,'price')),1),$results));
Output:
array (
0 =>
stdClass::__set_state(array(
'name' => 'ACE',
'partner_code' => 'AC',
'price' => '186.53',
'tier' => '3',
)),
1 =>
stdClass::__set_state(array(
'name' => 'Budget',
'partner_code' => 'BU',
'price' => '365.36',
'tier' => '1',
)),
2 =>
stdClass::__set_state(array(
'name' => 'Avis',
'partner_code' => 'AV',
'price' => '449.71',
'tier' => '1',
)),
3 =>
stdClass::__set_state(array(
'name' => 'E-Z',
'partner_code' => 'EZ',
'price' => '270.56',
'tier' => '2',
)),
4 =>
stdClass::__set_state(array(
'name' => 'Sixt',
'partner_code' => 'SX',
'price' => '280.52',
'tier' => '2',
)),
5 =>
stdClass::__set_state(array(
'name' => 'Alamo',
'partner_code' => 'AL',
'price' => '345.13',
'tier' => '2',
)),
6 =>
stdClass::__set_state(array(
'name' => 'Advantage',
'partner_code' => 'AD',
'price' => '357.61',
'tier' => '2',
)),
7 =>
stdClass::__set_state(array(
'name' => 'Enterprise',
'partner_code' => 'ET',
'price' => '364.46',
'tier' => '2',
)),
8 =>
stdClass::__set_state(array(
'name' => 'Fox',
'partner_code' => 'FX',
'price' => '265.25',
'tier' => '3',
)),
9 =>
stdClass::__set_state(array(
'name' => 'Payless',
'partner_code' => 'ZA',
'price' => '380.47',
'tier' => '3',
)),
10 =>
stdClass::__set_state(array(
'name' => 'Dollar',
'partner_code' => 'ZR',
'price' => '385.99',
'tier' => '3',
)),
11 =>
stdClass::__set_state(array(
'name' => 'Thrifty',
'partner_code' => 'ZT',
'price' => '385.99',
'tier' => '3',
)),
12 =>
stdClass::__set_state(array(
'name' => 'Silvercar',
'partner_code' => 'SC',
'price' => '424.10',
'tier' => '3',
)),
13 =>
stdClass::__set_state(array(
'name' => 'National',
'partner_code' => 'NA',
'price' => '448.82',
'tier' => '3',
)),
14 =>
stdClass::__set_state(array(
'name' => 'Hertz',
'partner_code' => 'HZ',
'price' => '487.33',
'tier' => '3',
)),
)
I think this is a leaner method generating the same/desired result: (Demo)
$min=$results[0]->price; // set initial/default min value
$index=0; // set initial/default index
foreach($results as $i=>$a){
if($a->price<$min){ // if a lower price...
$min=$a->price; // store new $min
$index=$i; // stor new $index
}
}
$results=array_merge($results,array_splice($results,$index,1)); // extract lowest and move to front of array
var_export($results);

search array and find depedent items

I have a tree like below, which contains the nth level permission.
Landing Page Footer Archive
|| || ||
|| || ||
Current ========== Pipeline=== BHI Phonebook==Password Keeper Edit==View==Delete
|| ||
Open Forms Open Forms
|| ||
Blog Request Blog Request
|| ||
Add == Edit Add == Edit
Sample Array
$list = Array
(
[0] => Array
(
[parent] => 0
[item_level] => 1
[id] => 1
[display_name] => Landing Page
)
[1] => Array
(
[parent] => 1
[item_level] => 2
[id] => 2
[display_name] => Current
)
[2] => Array
(
[parent] => 2
[item_level] => 3
[id] => 5
[display_name] => Open Forms
)
[3] => Array
(
[parent] => 5
[item_level] => 4
[id] => 9
[display_name] => Blog Request
)
[4] => Array
(
[parent] => 9
[item_level] => 5
[id] => 10
[display_name] => Add
)
[5] => Array
(
[parent] => 9
[item_level] => 5
[id] => 11
[display_name] => Update
)
[6] => Array
(
[parent] => 1
[item_level] => 2
[id] => 3
[display_name] => Pipeline
)
[7] => Array
(
[parent] => 3
[item_level] => 3
[id] => 6
[display_name] => Open Forms
)
[8] => Array
(
[parent] => 6
[item_level] => 4
[id] => 12
[display_name] => Blog Request
)
[9] => Array
(
[parent] => 12
[item_level] => 5
[id] => 13
[display_name] => Add
)
[10] => Array
(
[parent] => 12
[item_level] => 5
[id] => 14
[display_name] => Update
)
[11] => Array
(
[parent] => 1
[item_level] => 2
[id] => 4
[display_name] => BHI
)
[12] => Array
(
[parent] => 1
[item_level] => 2
[id] => 7
[display_name] => Add Property
)
[13] => Array
(
[parent] => 1
[item_level] => 2
[id] => 8
[display_name] => Show Child Properties
)
[14] => Array
(
[parent] => 0
[item_level] => 1
[id] => 15
[display_name] => Footer
)
[15] => Array
(
[parent] => 15
[item_level] => 2
[id] => 16
[display_name] => Phonebook
)
[16] => Array
(
[parent] => 15
[item_level] => 2
[id] => 17
[display_name] => Password Keeper
)
[17] => Array
(
[parent] => 0
[item_level] => 1
[id] => 18
[display_name] => Archive
)
[18] => Array
(
[parent] => 18
[item_level] => 2
[id] => 19
[display_name] => Edit
)
[19] => Array
(
[parent] => 18
[item_level] => 2
[id] => 20
[display_name] => View
)
[20] => Array
(
[parent] => 18
[item_level] => 2
[id] => 21
[display_name] => Delete
)
)
Expected Output
//Here Key is the value of "id" attribute
$final_output = array(
1 => array(
2=>array(5=>array(9=>array(10,11))),
3=>array(6=>array(12=>array(13,14))),
4,//As it doesnt have any child
7,//As it doesnt have any child
8 //As it doesnt have any child
),
15 => array(
16, //As it doesnt have any child
17 ////As it doesnt have any child
),
18 => array(
19, //As it doesnt have any child
20, ////As it doesnt have any child
21 ////As it doesnt have any child
),
);
here, 1: Landing Page ,15 : Footer ,18 : Archive (its "Id" attribute) etc.
After above array i will have to do a nth level loop.
like:
foreach($final_output as $res)
{
if(is_array($res))
{
//Then do something, i am not sure how this achivable
}
}
What i have done so far, but no success.
//To find out the how manhy levels are in array
$unique_level = array_unique(array_map(function ($i) { return $i['item_level']; }, $list));
$parent_data = $level_data = array();
foreach($list as $key=>$res)
{
if($res['parent']==0)
{
if(!array_key_exists($res['id'],$parent_data)) // First insert all unique parent at level 1
{
$parent_data[$res['id']] = $res;
}
}
$level_data[$res['parent']][] = array(
'display_name' => $res['display_name'],
'id' => $res['id'],
'parent' => $res['parent'],
);
}
Ready to use json
[{"parent":"0","item_level":"1","id":"1","display_name":"Landing Page"},{"parent":"1","item_level":"2","id":"2","display_name":"Current"},{"parent":"2","item_level":"3","id":"5","display_name":"Open Forms"},{"parent":"5","item_level":"4","id":"9","display_name":"Blog Request"},{"parent":"9","item_level":"5","id":"10","display_name":"Add"},{"parent":"9","item_level":"5","id":"11","display_name":"Update"},{"parent":"1","item_level":"2","id":"3","display_name":"Pipeline"},{"parent":"3","item_level":"3","id":"6","display_name":"Open Forms"},{"parent":"6","item_level":"4","id":"12","display_name":"Blog Request"},{"parent":"12","item_level":"5","id":"13","display_name":"Add"},{"parent":"12","item_level":"5","id":"14","display_name":"Update"},{"parent":"1","item_level":"2","id":"4","display_name":"BHI"},{"parent":"1","item_level":"2","id":"7","display_name":"Add Property"},{"parent":"1","item_level":"2","id":"8","display_name":"Show Child Properties"},{"parent":"0","item_level":"1","id":"15","display_name":"Footer"},{"parent":"15","item_level":"2","id":"16","display_name":"Phonebook"},{"parent":"15","item_level":"2","id":"17","display_name":"Password Keeper"},{"parent":"0","item_level":"1","id":"18","display_name":"Archive"},{"parent":"18","item_level":"2","id":"19","display_name":"Edit"},{"parent":"18","item_level":"2","id":"20","display_name":"View"},{"parent":"18","item_level":"2","id":"21","display_name":"Delete"}]
The nearest I've got is...
$list = json_decode($data, true);
$baseList = array_combine(array_column($list,'id'), $list);
$hierarchy = [];
foreach ( $baseList as $newItem ) {
$parent = $newItem['parent'];
$hierarchy[$parent][] = $newItem['id'];
}
function buildTree ( $startNode, $hierarchy) {
$newLevel = [];
foreach ( $startNode as $children ) {
if ( isset($hierarchy[$children])) {
$newLevel[$children] = buildTree($hierarchy[$children], $hierarchy);
}
else {
$newLevel[$children] = $children;
}
}
return $newLevel;
}
$finalOutput = buildTree ( $hierarchy[0], $hierarchy );
print_r($finalOutput);
The problem you have is where you have elements like...
1 => array(
2=>array(5=>array(9=>array(10,11))),
3=>array(6=>array(12=>array(13,14))),
4,//As it doesnt have any child
7,//As it doesnt have any child
8 //As it doesnt have any child
),
As you almost have elements 4, 7 and 8 which don't have a key - all elements in an array have a key, this isn't going to work.
The output which I've done is...
Array
(
[1] => Array
(
[2] => Array
(
[5] => Array
(
[9] => Array
(
[10] => 10
[11] => 11
)
)
)
[3] => Array
(
[6] => Array
(
[12] => Array
(
[13] => 13
[14] => 14
)
)
)
[4] => 4
[7] => 7
[8] => 8
)
[15] => Array
(
[16] => 16
[17] => 17
)
[18] => Array
[19] => 19
[20] => 20
[21] => 21
)
) [19] => 19
[20] => 20
[21] => 21
)
)
Which as you can see, has element 4 having a value of 4.
$list = Array
(
0 => Array
(
'parent' => 0,
'item_level' => 1,
'id' => 1,
'display_name' => 'Landing Page'
),
1 => Array
(
'parent' => 1,
'item_level' => 2,
'id' => 2,
'display_name' => 'Current'
),
2 => Array
(
'parent' => 2,
'item_level' => 3,
'id' => 5,
'display_name' => 'Open Forms'
),
3 => Array
(
'parent' => 5,
'item_level' => 4,
'id' => 9,
'display_name' => 'Blog Request'
),
4 => Array
(
'parent' => 9,
'item_level' => 5,
'id' => 10,
'display_name' => 'Add'
),
5 => Array
(
'parent' => 9,
'item_level' => 5,
'id' => 11,
'display_name' => 'Update'
),
6 => Array
(
'parent' => 1,
'item_level' => 2,
'id' => 3,
'display_name' => 'Pipeline'
),
7 => Array
(
'parent' => 3,
'item_level' => 3,
'id' => 6,
'display_name' => 'Open Forms'
),
8 => Array
(
'parent' => 6,
'item_level' => 4,
'id' => 12,
'display_name' => 'Blog Request'
),
9 => Array
(
'parent' => 12,
'item_level' => 5,
'id' => 13,
'display_name' => 'Add'
),
10 => Array
(
'parent' => 12,
'item_level' => 5,
'id' => 14,
'display_name' => 'Update'
),
11 => Array
(
'parent' => 1,
'item_level' => 2,
'id' => 4,
'display_name' => 'BHI'
),
12 => Array
(
'parent' => 1,
'item_level' => 2,
'id' => 7,
'display_name' => 'Add Property'
),
13 => Array
(
'parent' => 1,
'item_level' => 2,
'id' => 8,
'display_name' => 'Show Child Properties'
),
14 => Array
(
'parent' => 0,
'item_level' => 1,
'id' => 15,
'display_name' => 'Footer'
),
15 => Array
(
'parent' => 15,
'item_level' => 2,
'id' => 16,
'display_name' => 'Phonebook'
),
16 => Array
(
'parent' => 15,
'item_level' => 2,
'id' => 17,
'display_name' => 'Password Keeper'
),
17 => Array
(
'parent' => 0,
'item_level' => 1,
'id' => 18,
'display_name' => 'Archive'
),
18 => Array
(
'parent' => 18,
'item_level' => 2,
'id' => 19,
'display_name' => 'Edit'
),
19 => Array
(
'parent' => 18,
'item_level' => 2,
'id' => 20,
'display_name' => 'View'
),
20 => Array
(
'parent' => 18,
'item_level' => 2,
'id' => 21,
'display_name' => 'Delete'
),
);
Hi, try this code:
$results=array();
$parent1='';$parent=$parent2='';
foreach ($list as $key => $value) {
if($value['parent']==0)
{
$results[$value['id']]=$value;
$id=$value["id"];
}
if($id==$value['parent']&&$id!="")
{
$results[$id][$value['id']]=$value;
$parent=$value['id'];
}
if($parent==$value['parent']&&$parent!="")
{
$results[$id][$parent][$value['id']]=$value;
$parent1=$value['id'];
}
if($parent1==$value['parent']&&$parent1!="")
{
$results[$id][$parent][$parent1][$value['id']]=$value;
$parent2=$value['id'];
}
if($parent2==$value['parent']&&$parent2!="")
{
$results[$id][$parent][$parent1][$parent2][$value['id']]=$value;
$parent3=$value['id'];
}
}
echo '<pre>';
print_r($results);
echo '</pre>';

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

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

PHP tree array remove levels

I have an "tree" array like the following. This is a navigation. Now i want to remove all levels >= 3. So i only want to get an array with the first two levels. Is there a way to trim/shorten the array like that.
Do you have a hint for me what i can look for?
Array
(
[0] => Array
(
[name] => Home
[level] => 1
[sub] =>
)
[1] => Array
(
[name] => Products
[level] => 1
[sub] => Array
(
[56] => Array
(
[name] => Product 1
[level] => 2
[sub] => Array
(
[61] => Array
(
[name] => Product 1b
[target] =>
[level] => 3
[sub] =>
)
)
)
[57] => Array
(
[name] => Product 2
[level] => 2
[sub] =>
)
)
)
[2] => Array
(
[name] => Contact
[level] => 1
[sub] =>
)
[3] => Array
(
[name] => Something Else
[level] => 1
[sub] =>
)
)
$data = [
0 => ['name' => 'Home', 'level' => 1, 'sub' => []],
1 => [
'name' => 'Products',
'level' => 2,
'sub' => [
'56' => [
'name' => 'Product 1',
'level' => 2,
'sub' => [
'61' => [ 'name' => 'Product 1b', 'target' => '', 'level' => 3, 'sub' => ''],
],
],
'57' => ['name' => 'Product 2', 'level' => 2, 'sub' => '']
]
],
2 => ['name' => 'Contact', 'level' => 1, 'sub' => []],
3 => ['name' => 'Something Else', 'level' => 1, 'sub' => []]
];
function processArray(&$arr) {
foreach ($arr as $key => $array) {
if ($array['level'] >= 3) {
unset($arr[$key]);
}
if (!empty($arr[$key]['sub'])) {
processArray($arr[$key]['sub']);
}
}
}
processArray($data);

Categories