Ahmadhc
Ahmadhc

Reputation: 173

merge many array based on a common key php

I wasn't so clear in my first question, so i deleted it and here is a reformulation; I have those arrays:

    $open = array(array("FAI1","34"),array("FAI2","34"),array("FAI3","34"));
    $click = array(array("FAI2","52"),array("FAI1","68"),array("FAI3","99"));
    $unsubscribe = array(array("FAI2","103"),array("FAI3","67"),array("FAI1","102"));
    $def_sent = array(array("FAI1","34",24),array("FAI2","34",23),array("FAI3","34",27));
    $SB = array(array("FAI2","103"),array("FAI3","67"),array("FAI1","102"));
    $HB = array(array("FAI2","103"),array("FAI3","67"),array("FAI1","102"));

I searched for a function to merge them and get a result like this:

     $result = array(array("FAI1",34,68,102,34,24,102,102) 
     ,array("FAI2","34",23.....),
     array("FAI3","34",27....));

and to do this, i used the function, in the php online documentation, and this is the function

function array_merge_recursive() {

    $arrays = func_get_args();
    $base = array_shift($arrays);

    foreach ($arrays as $array) {
        reset($base); 
        while (list($key, $value) = @each($array)) {
            if (is_array($value) && @is_array($base[$key])) {
                $base[$key] = array_merge_recursive($base[$key], $value);
            } else {
                $base[$key] = $value;
            }
        }
    }

    return $base;
}

But instead of getting the result above i got this:

FAI1|34
FAI2|34
FAI3|34
FAI2|52
FAI1|68
FAI3|99
...

So i need some help to reformulate this function to get the expected result.

Upvotes: 0

Views: 124

Answers (1)

romik
romik

Reputation: 630

Try this function:

function array_merge_rec() {
    $arrays = func_get_args();
    $result = array();
    foreach ($arrays as $arg) {
        if (is_array($arg)) {
            foreach ($arg as $item) {
                if (!isset($result[$item[0]])) {
                    $result[$item[0]] = $item;
                } else {
                    $result[$item[0]][] = $item[1];
                }
            }
        } else {
            echo "$arg skippend because it isn't array\n";
        }
   }

   return array_values($result);

}

Does it help?

Upvotes: 1

Related Questions