I want to group the data in an array with associative rows. Group should be determined by the type
value and all label_id
values within each group should be formed into a subarray.
Sample input:
$array = [
['type' => 'AAA', 'label_id' => 'A1,35'],
['type' => 'AAA', 'label_id' => 'A2,34'],
['type' => 'BBB', 'label_id' => 'B1,29'],
['type' => 'CCC', 'label_id' => 'C1,20'],
['type' => 'CCC', 'label_id' => 'C2,19'],
['type' => 'CCC', 'label_id' => 'C3,18']
];
The desired result:
[
[
'type' => 'AAA',
'label_id' => [
'A1,35',
'A2,34'
],
[
'type' => 'BBB',
'label_id' => [
'B1,29'
],
],
[
'type' => 'CCC',
'label_id' => [
'C1,20',
'C2,19',
'C3,18',
]
]
]
This should do the trick
$args = array
(
array( 'type' => 'AAA', 'label_id' => 'A1,35' ),
array( 'type' => 'AAA', 'label_id' => 'A2,34' ),
array( 'type' => 'BBB', 'label_id' => 'B1,29' ),
array( 'type' => 'CCC', 'label_id' => 'C1,20' ),
array( 'type' => 'CCC', 'label_id' => 'C2,19' ),
array( 'type' => 'CCC', 'label_id' => 'C3,18' )
);
$tmp = array();
foreach($args as $arg)
{
$tmp[$arg['type']][] = $arg['label_id'];
}
$output = array();
foreach($tmp as $type => $labels)
{
$output[] = array(
'type' => $type,
'label_id' => $labels
);
}
var_dump($output);
The output is :
array
0 =>
array
'type' => string 'AAA' (length=3)
'label_id' =>
array
0 => string 'A1,35' (length=5)
1 => string 'A2,34' (length=5)
1 =>
array
'type' => string 'BBB' (length=3)
'label_id' =>
array
0 => string 'B1,29' (length=5)
2 =>
array
'type' => string 'CCC' (length=3)
'label_id' =>
array
0 => string 'C1,20' (length=5)
1 => string 'C2,19' (length=5)
2 => string 'C3,18' (length=5)