首頁 > 後端開發 > php教程 > PHP数组的合并处理

PHP数组的合并处理

WBOY
發布: 2016-06-06 20:47:02
原創
1101 人瀏覽過

有两个数组:

<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>
登入後複製
相關標籤:
php
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板