简体   繁体   中英

merge two array with different dimension

I have array A and B with the structure:

A:

Array
(
    [0] => 2013-08-01
    [1] => 2013-08-02
    [2] => 2013-08-03
    [3] => 2013-08-04 
)

and B:

Array
(
    [0] => Array
        (
            [0] => 2013-08-01
            [1] => 2
            [2] => 0
            [3] => 0
        )

    [1] => Array
        (
            [0] => 2013-08-02
            [1] => 0
            [2] => 4
            [3] => 0
        )

    [2] => Array
        (
            [0] => 2013-08-04
            [1] => 0
            [2] => 1
            [3] => 0
        )
)

The question is I want to combine twi ARRAY (A & B) to be like this:

Array
(
    [0] => Array
        (
            [0] => 2013-08-01
            [1] => 2
            [2] => 0
            [3] => 0
        )
    [1] => Array
        (
            [0] => 2013-08-02
            [1] => 0
            [2] => 4
            [3] => 0
        )
    [2] => Array
        (
            [0] => 2013-08-03
            [1] => 0
            [2] => 0
            [3] => 0
        )
    [3] => Array
        (
            [0] => 2013-08-04
            [1] => 0
            [2] => 1
            [3] => 0
        )
)

How to merge the both of array?

<?

$a = Array
(
    "2013-08-01",
    "2013-08-02",
    "2013-08-03",
    "2013-08-04"
);

$b = Array
(
        Array (
            "2013-08-01",
            2,
            0,
            0
        ),

        Array (
            "2013-08-02",
            0,
            4,
            0
        ),

        Array (
            "2013-08-04",
            0,
            1,
            0
        )
);

foreach ($a as $a_item) {
    $found = FALSE;
    foreach ($b as $b_item) {
        if($b_item[0]==$a_item) {
            $found = TRUE;  
        }
    }

    if(!$found) {
        $b[] = Array (
            $a_item,
            0,
            0,
            0
        );

    }

}

print_r ($b);

?>

This should work if you don't have a huge amount of data in the arrays. If you have a large amount of data you should probably do some redesign to make it faster.

function combine($a, $b) {
    foreach($a as $item_a) {
        foreach($b as $item_b) {
            if(in_array($item_a, $item_b)) {
                continue 2;
            }
        }
        $b[] = array(
            $item_a, 0, 0, 0
        );
    }
    usort($b, function($a, $b){return $a[0] > $b[0];});
    return $b;
}

Assuming that the core dates are in array B, my approach would be to loop through array A and add to array B if a date is found that is not already in array B.

foreach ($arrA as $datecheck) {
    $blnAdd = 1;
    foreach ($arrB as $compare) {
        if ($compare[0] == $datecheck) {
            // If found, don't add!
            $blnAdd = 0;
        }
    }
    if ($blnAdd == 1) {
        $arrB[] = array($datecheck, 0, 0, 0);
    }
}

// When done, sort array B
// Create helper array for multisort
$arrHelper = array();
foreach ($arrB as $data) {
    $arrHelper = $data[0];
}
// Then, sort array B using values from helper array
array_multisort($arrHelper, $arrB);

Then, $arrB should contain the values you need.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM