MMMM
MMMM

Reputation: 141

How To Merge/push array into one in php

code

$result = [];
            foreach ($getAllAgent as $rkey => $rvalue) {
                $found = -1;
                for ($i = 0; $i < count($result); $i++) {
                    if ($result[$i]["brokerid"] == $rvalue["brokerid"]) {
                        $found = $i;
                        $result[$i]['get_agent_details'][] = $rvalue['get_agent_details']; //here to combine
                        break;
                    }
                }
                // if not found, create new
                if ($found == -1) {
                    $result[] = $rvalue;
                } 

results

Array
    (
        [0] => Array
            (
                [id] => 2
                [brokerid] => 2
                [agentid] => 3
                [addedby] => 1
                [get_agent_details] => Array
                    (
                        [id] => 3
                        [name] => kenang
                        [ic] => 932132923
                        [phone] => 2313123
                        [0] => Array
                            (
                                [id] => 4
                                [name] => ivan
                                [ic] => 32992131
                                [phone] => 31231                        
                            )
                    )
            )
    )

I have one set of an array, and I loop it and restructure match the data based on ID. After that I will try to merge the same data into one array, I able add into one array. But it will not combine as one. The correct result should be as below.

[get_agent_details] => Array
                    (
                        [0] => Array(
                                 [id] => 3
                                 [name] => kenang
                                 [ic] => 932132923
                                 [phone] => 2313123
                               ),
                        [1] => Array
                            (
                                [id] => 4
                                [name] => ivan
                                [ic] => 32992131
                                [phone] => 31231                        
                            )
                    )

Upvotes: 0

Views: 57

Answers (1)

IMSoP
IMSoP

Reputation: 97668

Your problem is in this line:

$result[] = $rvalue;

Consider the case where you only have one item; this will result in:

Array
(
    [0] => Array
        (
            [id] => 2
            [brokerid] => 2
            [agentid] => 3
            [addedby] => 1
            [get_agent_details] => Array
                (
                    [id] => 1
                    [name] => Chesney Hawkes
                    [ic] => 932132923
                    [phone] => 2313123
                )
        )
)

But to be consistent, you need get_agent_details to be a list of items, that happens to have one entry:

Array
(
    [0] => Array
        (
            [id] => 2
            [brokerid] => 2
            [agentid] => 3
            [addedby] => 1
            [get_agent_details] => Array
                (
                    [0] => Array
                        (
                            [id] => 1
                            [name] => Chesney Hawkes
                            [ic] => 932132923
                            [phone] => 2313123
                        )
                )
        )
)

So you need to re-arrange your data, for instance by writing:

$rvalue['get_agent_details'] = [0 => $rvalue['get_agent_details']];
$result[] = $rvalue;

Then, since get_agent_details will already be a list when you encounter a second matching item, your existing code in the inner loop will do the right thing:

// Add an item to the list
$result[$i]['get_agent_details'][] = $rvalue['get_agent_details'];

Upvotes: 1

Related Questions