Get 3 element per category From array in PHP - php

I have 2 arrays category and product_to_category (Structure shown below)
[category] => Array
(
[0] => 299
[2] => 342
[3] => 134
[4] => 333
[5] => 347
[9] => 296
)
And
[product_to_category] => Array
(
[0] => Array
(
[product_id] => 23895
[category_id] => 296
[relevance] => 77.73432159423828
)
[1] => Array
(
[product_id] => 17218
[category_id] => 296
[relevance] => 77.73432159423828
)
[2] => Array
(
[product_id] => 23896
[category_id] => 347
[relevance] => 77.73432159423828
)
....So On (5000+ records)
i have almost 5000+ records in product_to_category array, But i want to pick only 3 products from P2C array per Category. For Example category_id=299 so 3 products of 299 will be added to my new array and same for other categories.
Is there any possible way to do that .

Try this query to fetch record you wanted,
select p2c.product_id, p2c.category_id, p2c.relevance
from category c
LEFT JOIN product_to_category p2c ON p2c.category_id = category.category_id
GROUP BY p2c.product_id, p2c.category_id
HAVING count(*) <= 3
ORDER BY category_id, product_id
You can refer table category to category table and product_to_category to your table name in database.

$category = [0 => 299, 2 => 342, 3 => 134, 4 => 333, 5 => 347, 9 => 296];
$product_to_category = Array
(
0 => Array
(
'product_id' => 23895,
'category_id' => 296,
'relevance' => 77.73432159423828
),
1 => Array
(
'product_id' => 17218,
'category_id' => 296,
'relevance' => 77.73432159423828
),
2 => Array
(
'product_id' => 23896,
'category_id' => 347,
'relevance' => 77.73432159423828
),
3 => Array
(
'product_id' => 23897,
'category_id' => 296,
'relevance' => 77.73432159423828
),
4 => Array
(
'product_id' => 23899,
'category_id' => 296,
'relevance' => 77.73432159423828
),
5 => Array
(
'product_id' => 23894,
'category_id' => 347,
'relevance' => 77.73432159423828
),
6 => Array
(
'product_id' => 23892,
'category_id' => 347,
'relevance' => 77.73432159423828
),
7 => Array
(
'product_id' => 23833,
'category_id' => 347,
'relevance' => 77.73432159423828
)
);
$new_product_to_category = [];
foreach ($category as $categories) {
$count_category_ids = [];
$i=0;
foreach ($product_to_category as $product_to_categories){
if ($categories == $product_to_categories['category_id']){
$count_category_ids[] = $product_to_categories['category_id'];
if (count($count_category_ids) < 4) {
$new_product_to_category[$i]['product_id'] = $product_to_categories['product_id'];
$new_product_to_category[$i]['category_id'] = $product_to_categories['category_id'];
$new_product_to_category[$i]['relevance'] = $product_to_categories['relevance'];
}
}
$i++;
}
}
echo "<pre>";
print_r($new_product_to_category);
Output shows like this :
Array
(
[2] => Array
(
[product_id] => 23896
[category_id] => 347
[relevance] => 77.734321594238
)
[5] => Array
(
[product_id] => 23894
[category_id] => 347
[relevance] => 77.734321594238
)
[6] => Array
(
[product_id] => 23892
[category_id] => 347
[relevance] => 77.734321594238
)
[0] => Array
(
[product_id] => 23895
[category_id] => 296
[relevance] => 77.734321594238
)
[1] => Array
(
[product_id] => 17218
[category_id] => 296
[relevance] => 77.734321594238
)
[3] => Array
(
[product_id] => 23897
[category_id] => 296
[relevance] => 77.734321594238
)
)

$categories = array(6, 5, 3, 4, 2, 1);
$products = array(
array('product_id' => 231, 'category_id' => 1, 'relevance' => 321),
array('product_id' => 232, 'category_id' => 4, 'relevance' => 322),
array('product_id' => 233, 'category_id' => 2, 'relevance' => 323),
array('product_id' => 234, 'category_id' => 4, 'relevance' => 324),
array('product_id' => 235, 'category_id' => 4, 'relevance' => 325),
array('product_id' => 236, 'category_id' => 2, 'relevance' => 326),
array('product_id' => 237, 'category_id' => 1, 'relevance' => 327),
array('product_id' => 238, 'category_id' => 4, 'relevance' => 328),
array('product_id' => 239, 'category_id' => 1, 'relevance' => 329),
array('product_id' => 240, 'category_id' => 1, 'relevance' => 330)
);
$categoryWiseProduct = array();
foreach ($products as $p) {
foreach ($categories as $c) {
if ($c == $p['category_id']) {
if (isset($categoryWiseProduct[$c]) && count($categoryWiseProduct[$c]) > 2) {
break;
}
$categoryWiseProduct[$c][] = $p;
}
}
}
echo'<pre>';print_r($categoryWiseProduct);die;
Output will be:
Array
(
[1] => Array
(
[0] => Array
(
[product_id] => 231
[category_id] => 1
[relevance] => 321
)
[1] => Array
(
[product_id] => 237
[category_id] => 1
[relevance] => 327
)
[2] => Array
(
[product_id] => 239
[category_id] => 1
[relevance] => 329
)
)
[4] => Array
(
[0] => Array
(
[product_id] => 232
[category_id] => 4
[relevance] => 322
)
[1] => Array
(
[product_id] => 234
[category_id] => 4
[relevance] => 324
)
[2] => Array
(
[product_id] => 235
[category_id] => 4
[relevance] => 325
)
)
[2] => Array
(
[0] => Array
(
[product_id] => 233
[category_id] => 2
[relevance] => 323
)
[1] => Array
(
[product_id] => 236
[category_id] => 2
[relevance] => 326
)
)
)

try this code
$collection = array();
foreach($arr as $key => $value){
if(
isset($collection[$value['category_id']])
&&
count($collection[$value['category_id']]) >= 3
) continue;
$collection[$value['product_id']][] = $value['product_id'];
}
In this way, you will get 3 products from each category.
You can add more condition if you need, like check the product id you can use inside if condition
&& in_array($product_id, $collection[$value['category_id']])

Related

How to compare two different multidimensional array?

I have two array as below
Array 1
Array
(
[0] => Array
(
[ps_id] => 5
[product_id] => 2
[supplier_id] => 25
[cost] => 789.00
[name] => Mahesh
)
[1] => Array
(
[ps_id] => 6
[product_id] => 2
[supplier_id] => 2
[cost] => 12345.00
[name] => mayank
)
[2] => Array
(
[ps_id] => 7
[product_id] => 2
[supplier_id] => 1
[cost] => 123456.00
[name] => abc
)
[3] => Array
(
[ps_id] => 10
[product_id] => 2
[supplier_id] => 8
[cost] => 12000.00
[name] => mayank1
)
)
Array 2
Array
(
[0] => Array
(
[suppliers] => Mahesh
[suppliers_cost] => 789.00
)
[1] => Array
(
[suppliers] => mayank
[suppliers_cost] => 12345.00
)
[2] => Array
(
[suppliers] => mayank1
[suppliers_cost] => 12000.00
)
[3] => Array
(
[suppliers] => testtetstet
[suppliers_cost] => 123123
)
)
I want to compare above array by their suppliers and name key,
Means if this both key have same values than it will store into one new array and if those key are not match then they will store new different array.
Or might be it possible that both array will have different number of keys
I had tried like below
foreach ($existsProductSupplier as $key => $value) {
if (isset($supplier_data[$key])) {
}else{
$supplier_data[$key]['suppliers']='';
$supplier_data[$key]['suppliers_cost']='';
}
}
foreach ($supplier_data as $key => $value) {
if(in_array($value['suppliers_cost'],$existsProductSupplier[$key])){
//echo "string";
// print_r($value);
}else{
echo "string";
//print_r($value);
}
}
try this code it will help you
<?php
$arr1=Array
(
0 => Array
(
"ps_id" => 5,
"product_id" => 2,
"supplier_id" => 25,
"cost" => 789.00,
"name" => "Mahesh"
),
1 => Array
(
"ps_id" => 6,
"product_id" => 2,
"supplier_id" => 2,
"cost" => 12345.00,
"name" => "mayank"
),
2 => Array
(
"ps_id" => 7,
"product_id" => 2,
"supplier_id" => 1,
"cost" => 123456.00,
"name" => "abc"
),
3 => Array
(
"ps_id" => 10,
"product_id" => 2,
"supplier_id" => 8,
"cost" => 12000.00,
"name" => "mayank1"
),
4 => Array
(
"ps_id" => 10,
"product_id" => 2,
"supplier_id" => 8,
"cost" => 12000.00,
"name" => "mayank2"
)
);
$arr2=Array
(
0 => Array
(
"suppliers" => "Mahesh",
"suppliers_cost" => 789.00
),
1 => Array
(
"suppliers" => "mayank",
"suppliers_cost" => 12345.00
),
2 => Array
(
"suppliers" => "mayank1",
"suppliers_cost" => 12000.00
),
3 => Array
(
"suppliers" => "testtetstet",
"suppliers_cost" => 123123
)
);
foreach($arr1 as $key=>$value){
if(isset($arr2[$key])){
if($value['name']==$arr2[$key]['suppliers']){
$arrnew1[]=$value['name'];
}else{
$arrnew2[]=$value['name'];
}
}else{
$arrnew2[]=$value['name'];
}
}
print_r($arrnew1);
print_r($arrnew2);

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

Sort function that sorts alphabetical and numbers

I have an array that looks like this:
Array ( [0] => Array ( [id] => 1103 [age] => 37 [gen] => C:3:2:5:1:4 ) [1] => Array ( [id] => 1104 [age] => 37 [gen] => A:3:1:4:1 ) [2] => Array ( [id] => 1105 [age] => 36 [gen] => A:3:2:3:2 ) [3] => Array ( [id] => 1106 [age] => 32 [gen] => B:2:5:1:2:2 ) [4] => Array ( [id] => 1107 [age] => 31 [gen] => C:3:4:4:5:3 [5] => Array ( [id] => 1104 [age] => 37 [gen] => A:3:1:4:1:6 ))
I want to sort the array by the gen key so the result will be like this:
A:3:1:4:1:6
A:3:2:3:2
B:2:5:1:2:2
C:3:2:5:1:4
C:3:4:4:5:3
I tried this code:
uasort($newArray, function($a, $b) {
return strnatcasecmp($a['ngen'], $b['ngen']);
});
But canĀ“t get the correct result. Any ideas?
This function will help you to sort the array, just pass the key by which the array is to be sort.
function build_sorter($key)
{
return function ($a, $b) use ($key) {
return strnatcmp($a[$key], $b[$key]);
};
}
Example Code:
$results = array(0 => array ( 'id' => 1103, 'age' => 37, 'gen' => 'C:3:2:5:1:4' ),
1 => array ( 'id' => 1104, 'age' => 37, 'gen' => 'A:3:1:4:1' ),
2 => array ( 'id' => 1105, 'age' => 36, 'gen' => 'A:3:2:3:2' ),
3 => array ( 'id' => 1106, 'age' => 32, 'gen' => 'B:2:5:1:2:2' ),
4 => array ( 'id' => 1107, 'age' => 31, 'gen' => 'C:3:4:4:5:3' ),
5 => array ( 'id' => 1104, 'age' => 37, 'gen' => 'A:3:1:4:1:6' )
);
usort($results, build_sorter('gen'));
echo "<pre>"; print_r($results) ;
Just call build_sorter('gen') in usort callback and pass key gen
This will hive you :
Array
(
[0] => Array
(
[id] => 1104
[age] => 37
[gen] => A:3:1:4:1
)
[1] => Array
(
[id] => 1104
[age] => 37
[gen] => A:3:1:4:1:6
)
[2] => Array
(
[id] => 1105
[age] => 36
[gen] => A:3:2:3:2
)
[3] => Array
(
[id] => 1106
[age] => 32
[gen] => B:2:5:1:2:2
)
[4] => Array
(
[id] => 1103
[age] => 37
[gen] => C:3:2:5:1:4
)
[5] => Array
(
[id] => 1107
[age] => 31
[gen] => C:3:4:4:5:3
)
)
<?php
$ar = [
["id" => 1103, "age" => 37, "gen" => "C:3:2:5:1:4"],
["id" => 1104, "age" => 37, "gen" => "A:3:1:4:1"],
["id" => 1105, "age" => 36, "gen" => "A:3:2:3:2"],
["id" => 1106, "age" => 32, "gen" => "B:2:5:1:2:2"],
["id" => 1107, "age" => 31, "gen" => "C:3:4:4:5:3"],
["id" => 1108, "age" => 37, "gen" => "A:3:1:4:1:6"],
];
usort($ar, function ($a, $b) {
return strcmp($a['gen'], $b['gen']);
});
foreach($ar as $r)
echo($r['id'] . " " . $r['gen'] . PHP_EOL);
Will give you:
1104 A:3:1:4:1
1108 A:3:1:4:1:6
1105 A:3:2:3:2
1106 B:2:5:1:2:2
1103 C:3:2:5:1:4
1107 C:3:4:4:5:3

how to sum array values if product_id same?

How to sum array values if products id same? I need sum product_price, quantity, total_price, shipping_price. This is my example
[936] => Array
(
[order_number] => 936
[status] => cancelled
[products] => Array
(
[0] => Array
(
[product_id] => 19
[sku] => sku2222222
[product_price] => 12.00
[quantity] => 1
[total_price] => 17
[shipping_price] => 5.00
)
[1] => Array
(
[product_id] => 19
[sku] => sku2222222
[product_price] => 12.00
[quantity] => 1
[total_price] => 17
[shipping_price] => 5.00
)
[2] => Array
(
[product_id] => 5
[sku] => sku2222222
[product_price] => 12.00
[quantity] => 1
[total_price] => 17
[shipping_price] => 5.00
)
)
)
You need use for loop to sum all needed variables.
$orders = array(
936 => array(
"order_number" => 936,
"products" => array(
array(
"product_id" => 19,
"total_price" => 17,
"shipping_price" => 10
),
array(
"product_id" => 19,
"total_price" => 17,
"shipping_price" => 10
),
array(
"product_id" => 5,
"total_price" => 17,
"shipping_price" => 10
),
)
)
);
foreach ($orders as $order_id => $order) {
$order_products = array();
foreach ($order['products'] as $product) {
if (isset($order_products[$product['product_id']])) {
$order_products[$product['product_id']]['total_price'] += $product['total_price'];
$order_products[$product['product_id']]['shipping_price'] += $product['shipping_price'];
} else {
$order_products[$product['product_id']] = $product;
}
}
$orders[$order_id]['products'] = $order_products;
}
print_r($orders);

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

Categories