-2

I have an array which is multidimensional

Array ( 
    [0] => Array ( [id] => 2 [id_product_attribute] => 9 ) 
    [1] => Array ( [id] => 2 [id_product_attribute] => 10 ) 
    [2] => Array ( [id] => 2 [id_product_attribute] => 8 ) 
    [3] => Array ( [id] => 3 [id_product_attribute] => 50 ) 
)

I want to convert this array into this form

Array ( 
    [0] => Array ( [id] => 2 [id_product_attribute] => Array(9,10,8) ) 
    [1] => Array ( [id] => 3 [id_product_attribute] => Array (50) )
)

1 Answers1

1

Loop throught the first array and merge the values into the second one, then use array_values to order the first level array: (Sandbox)

$orig = array( 
    0 => array( 'id' => 2, 'id_product_attribute' => 9 ),
    1 => array( 'id' => 2, 'id_product_attribute' => 10 ),
    2 => array( 'id' => 2, 'id_product_attribute' => 8 ),
    3 => array( 'id' => 3, 'id_product_attribute' => 50 )
);

$array = [];
foreach ($orig as $o) {
    if (!isset($array[$o['id']])) {
        $array[$o['id']] = ['id' => $o['id'], 'id_product_attribute' => []];
    }

    $array[$o['id']]['id_product_attribute'][] = $o['id_product_attribute'];
}

// to get the first array with indexes 0,1...
$result = array_values($array);

print_r($result);
Claudio
  • 5,078
  • 1
  • 22
  • 33