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

PHP数组的合并处理

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOriginal
2016-06-06 20:47:021129browse

有两个数组:

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

比较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>

比较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>

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

<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>
Statement:
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