Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

php array combine

I have the next array:

Array
(
    [0] => Array
        (
            [id] => 160
            [payment_period] => Monthly
            [plan_payment_type_id] => 171
            [payment_type_id] => 4
        )
    [1] => Array
        (
            [id] => 160
            [payment_period] => Monthly
            [plan_payment_type_id] => 172
            [payment_type_id] => 5
        )
    [2] => Array
        (
            [id] => 161
            [payment_period] => Weekly
            [plan_payment_type_id] => 173
            [payment_type_id] => 9
        )
)

I need to group this array by id. How can I do it in the best way? My output should be:

Array
(
    [0] => Array
        (
            [id] => 160
            [payment_period] => Monthly
            [payment_types] => Array(
                [0] => Array(
                    [plan_payment_type_id] => 171
                    [payment_type_id] => 4
                )
                [1] => Array(
                    [plan_payment_type_id] => 172
                    [payment_type_id] => 5
                )
            )
        )
    [1] => Array
        (
            [id] => 161
            [payment_period] => Weekly
            [payment_types] => Array(
                [0] => Array(
                    [plan_payment_type_id] => 173
                    [payment_type_id] => 9
                )
            )
        )
)

Thank you very much.

like image 724
Alex Pliutau Avatar asked Jun 14 '26 22:06

Alex Pliutau


1 Answers

Something like this:

$output = array();
$id_array = array();
$i = 0;
foreach($input as $key=>$val) {
        if(array_key_exists($val['id'],$id_array)) {
                $pos = $id_array[$val['id']];
                $output[$pos]['payment_types'][] = array('plan_payment_type_id'=> $val['plan_payment_type_id'],'payment_type_id' => $val['payment_type_id']);
        } else {
                $output[$i] = array('id' => $val['id'],'payment_period' => $val['payment_period'],'payment_types' => array(array('plan_payment_type_id'=> $val['plan_payment_type_id'],'payment_type_id' => $val['payment_type_id'])));
                echo "Adding ",$val['id'],"\n";
                $id_array[$val['id']] = $i; 
                $i++;
        }   
}

Working link

like image 81
codaddict Avatar answered Jun 16 '26 10:06

codaddict



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!