Home  >  Q&A  >  body text

PHP数组的合并处理

有两个数组:

===========
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数组)

求高手帮我想个办法。

PHP中文网PHP中文网2748 days ago379

reply all(3)I'll reply

  • 迷茫

    迷茫2017-04-10 14:43:17

    <?php 
    $A = array(
        array(
            'Vtime' => 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);
    

    reply
    0
  • 巴扎黑

    巴扎黑2017-04-10 14:43:17

    $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;
    

    reply
    0
  • 大家讲道理

    大家讲道理2017-04-10 14:43:17

    $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++;
            }
        }
    );
    

    reply
    0
  • Cancelreply