Reputation: 2634
I have a 2D-array which contains product id, product name and company id, now i want to make group of company having product information and can mail to company with product details, i have data in array like
Array
(
[0] => Array
(
[id] => 5363
[proname] => pro1
[company_id] => 101
)
[1] => Array
(
[id] => 5364
[proname] => pro2
[company_id] => 105
)
[2] => Array
(
[id] => 5366
[proname] => pro3
[company_id] => 102
)
[3] => Array
(
[id] => 5367
[proname] => pro4
[company_id] => 101
)
[4] => Array
(
[id] => 5368
[proname] => pro5
[company_id] => 105
)
[5] => Array
(
[id] => 5369
[proname] => pro6
[company_id] => 105
)
[6] => Array
(
[id] => 3847
[proname] => pro7
[company_id] => 102
)
[7] => Array
(
[id] => 3849
[proname] => pro8
[company_id] => 105
)
[8] => Array
(
[id] => 5371
[proname] => pro9
[company_id] => 101
)
[9] => Array
(
[id] => 5383
[proname] => pro10
[company_id] => 102
)
[10] => Array
(
[id] => 5385
[proname] => pro11
[company_id] => 105
)
)
And i want to make array chunks on the basis of company_id thus final array should be 3-d array and output should like this
array(
[0]=>Array(
[0] => Array
(
[id] => 5363
[proname] => pro1
[company_id] => 101
)
[1] => Array
(
[id] => 5367
[proname] => pro4
[company_id] => 101
)
[2] => Array
(
[id] => 5371
[proname] => pro9
[company_id] => 101
)
)
[1]=Array
(
[0] => Array
(
[id] => 5364
[proname] => pro2
[company_id] => 105
)
[1] => Array
(
[id] => 5368
[proname] => pro5
[company_id] => 105
)
[2] => Array
(
[id] => 5369
[proname] => pro6
[company_id] => 105
)
[3] => Array
(
[id] => 3849
[proname] => pro8
[company_id] => 105
)
[4] => Array
(
[id] => 5385
[proname] => pro11
[company_id] => 105
)
)
[2]=Array(
[0] => Array
(
[id] => 5366
[proname] => pro3
[company_id] => 102
)
[1] => Array
(
[id] => 3847
[proname] => pro7
[company_id] => 102
)
[2] => Array
(
[id] => 5383
[proname] => pro10
[company_id] => 102
)
)
)
aim is to make group as for company.
Upvotes: 1
Views: 200
Reputation: 1583
$groupBycompany = [];
if ($companies) {
foreach ($companies as $keys => $values) {
if (isset($values['company_id'])){
$groupByCompany[$values['company_id']][] = $values;
}
}
}
Upvotes: 0
Reputation: 11859
try this:
the easiest way:
$newarray = array();
foreach($array as $values) {
$newarray[$values['company_id']][] = $values;
}
$newarray = array_values($newarray);
another way:
<?php
$newarray = array();
foreach($array as $key=>$val){// here $array is your given array.
if(isset($newarray[$val['company_id']])){
array_push($newarray[$val['company_id']],$val);
}else{
$newarray[$val['company_id']][0]=$val;
}
}
$newarray = array_values($newarray);
echo "<pre>";
print_r($newarray);
echo "</pre>";
?>
Upvotes: 3
Reputation: 23958
Loop through the array.
Here, you get second dimension arrays consisting of third level (our expected arrays).
Check if the key is company_id
and append to a new array we have created before the loop.
$newArr = array();
foreach ($arr as $array) {
foreach ($array as $k=>$v) {
if ($k == 'company_id') {
$newArr[$k][] = $array;
}
}
}
print_r($newArr); // Your new array()
Upvotes: 0