Home > Backend Development > PHP Tutorial > PHP数组的合并处理

PHP数组的合并处理

WBOY
Release: 2016-06-06 20:47:02
Original
1100 people have browsed it

有两个数组:

<code class="lang-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
        )
)
</code>
Copy after login
Copy after login

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

求高手帮我想个办法。

回复内容:

有两个数组:

<code class="lang-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
        )
)
</code>
Copy after login
Copy after login

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

求高手帮我想个办法。

<code class="lang-php"><?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);
</code>
Copy after login

<code>$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;
</code>
Copy after login

<code class="lang-php">$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++;
        }
    }
);
</code>
Copy after login
Related labels:
php
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template