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