Try this..
<?php
$categories = [
['cat_subcat' => 'category1_subcat_1'],
['cat_subcat' => 'category1_subcat_2'],
['cat_subcat' => 'category1_subcat_3'],
['cat_subcat' => 'category2_subcat_1'],
['cat_subcat' => 'category2_subcat_2'],
['cat_subcat' => 'category3_subcat_1'],
['cat_subcat' => 'category3_subcat_3']
];
$finalCategories = [];
foreach ($categories as $category){
$cat_array = explode("_",$category['cat_subcat']);
$finalCategories[$cat_array[0]][] = $cat_array[1] . $cat_array[2];
}
echo "<pre>";
print_r($finalCategories);
The output will be..
Array
(
[category1] => Array
(
[0] => subcat1
[1] => subcat2
[2] => subcat3
)
[category2] => Array
(
[0] => subcat1
[1] => subcat2
)
[category3] => Array
(
[0] => subcat1
[1] => subcat3
)
)
Add the following lines of code..
// Adding another loop
$output = [];
$i = 0;
foreach ($finalCategories as $category => $subCategories) {
$output[$i]['cat_name'] = $category;
foreach ($subCategories as $subCategory) {
$output[$i]['sub_cat'][] = $subCategory;
}
$i++;
}
echo "<pre>";
print_r($output);
New Ouptut..
Array
(
[0] => Array
(
[cat_name] => category1
[sub_cat] => Array
(
[0] => subcat1
[1] => subcat2
[2] => subcat3
)
)
[1] => Array
(
[cat_name] => category2
[sub_cat] => Array
(
[0] => subcat1
[1] => subcat2
)
)
[2] => Array
(
[cat_name] => category3
[sub_cat] => Array
(
[0] => subcat1
[1] => subcat3
)
)
)