欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

PHP数组的合并处理

程序员文章站 2022-06-10 12:12:59
...
有两个数组:
===========
A:

array
(
    [0] => Array
        (
            [Vtime] => 2014-01-18 00:22:43
            [qr] => 0a5500f5d5e5847209d83a7fe637a34f
        )

    [1] => Array
        (
            [Vtime] => 2014-01-17 00:00:00
            [qr] => 218e412b1d73f771e8b01b9d1f678f5b
        )
)

===========
B:

array
(
    [0] => Array
        (
            [Date] => 2014-01-18 00:22:43
            [Md5] => 0a5500f5d5e5847209d83a7fe637a34f
        )

    [1] => Array
        (
            [Date] => 2014-01-18 00:22:43
            [Md5] => 218e412b1d73f771e8b01b9d1f678f5b
        )
    [2] => Array
        (
            [Date] => 2014-01-17 00:00:00
            [Md5] => 218e412b1d73f771e8b01b9d1f678f5b
        )
    [3] => Array
        (
            [Date] => 2014-01-17 00:00:00
            [Md5] => 218e412b1d73f771e8b01b9d1f678f5b
        )
    [4] => Array
        (
            [Date] => 2014-01-17 00:00:00
            [Md5] => 218e412b1d73f771e8b01b9d1f678f5b
        )
)

比较A数组Vtime和B数组中的Date是否相同,如果相同将数据合并(vtime, qr, Date, Md5)放到C数组,
如果不相同,则单独把A数组放到C数组。
(A数组要和B数组的每一个都对比,B数组只有和A数组对应的才会保留到C数组)

求高手帮我想个办法。

回复内容:

有两个数组:

===========
A:

array
(
    [0] => Array
        (
            [Vtime] => 2014-01-18 00:22:43
            [qr] => 0a5500f5d5e5847209d83a7fe637a34f
        )

    [1] => Array
        (
            [Vtime] => 2014-01-17 00:00:00
            [qr] => 218e412b1d73f771e8b01b9d1f678f5b
        )
)

===========
B:

array
(
    [0] => Array
        (
            [Date] => 2014-01-18 00:22:43
            [Md5] => 0a5500f5d5e5847209d83a7fe637a34f
        )

    [1] => Array
        (
            [Date] => 2014-01-18 00:22:43
            [Md5] => 218e412b1d73f771e8b01b9d1f678f5b
        )
    [2] => Array
        (
            [Date] => 2014-01-17 00:00:00
            [Md5] => 218e412b1d73f771e8b01b9d1f678f5b
        )
    [3] => Array
        (
            [Date] => 2014-01-17 00:00:00
            [Md5] => 218e412b1d73f771e8b01b9d1f678f5b
        )
    [4] => Array
        (
            [Date] => 2014-01-17 00:00:00
            [Md5] => 218e412b1d73f771e8b01b9d1f678f5b
        )
)

比较A数组Vtime和B数组中的Date是否相同,如果相同将数据合并(vtime, qr, Date, Md5)放到C数组,
如果不相同,则单独把A数组放到C数组。
(A数组要和B数组的每一个都对比,B数组只有和A数组对应的才会保留到C数组)

求高手帮我想个办法。

 1,
        'qr' => 2,
    ),
    array(
        'Vtime' => 3,
        'qr' => 4,
    ),
);

$B = array(
    array(
        'date' => 1,
        'md5' => 2,
    ),
    array(
        'date' => 5,
        'md5' => 6,
    ),
);

$D = array();
foreach($B as $b) {
    // 没有考虑date重复的问题
    $D[$b['date']] = $b;
}

$C = $A;
foreach($C as &$c) {
    if(isset($D[$c['Vtime']])) {
        $c = array_merge($c, $D[$c['Vtime']]);
    }
}
unset($c);

var_dump($C);

$A = array(); //初始数据$A
$B = array(); //初始数据$B

$D = array();
foreach($B as $b) {
    $D['date'][] = $b['Date'];
    $D['md5'][] = $b['Md5'];
}
$D = array_combine($D['date'], $D['md5']);

foreach($A as &$a)
    array_key_exists($a['Vtime'], $D) && $a['md5'] = $D[$a['Vtime']];

$C = $A;

$c = [];
$i = 0;
//遍历$a
array_walk(
    $a,
    function ($v, $k) use ($b, &$c, &$i) {
        //遍历$b
        foreach ($b as $bb) {
            //不同的部分
            $c[$i] = $v;
            //如果相同
            $v['Vtime'] == $bb['Date'] && list(
                $c[$i]['Date'],
                $c[$i]['Md5']
                ) = [
                $bb['Date'],
                $bb['Md5']
            ];
            $i++;
        }
    }
);
相关标签: php