有没有办法,使用两个以下数组来获得另一个数组,即这两个数组的组合?
数组1:
Array
(
[0] => Array
(
[a_id] => 9
[name] => Mario Lopez
)
[1] => Array
(
[a_id] => 8
[name] => Lisa Turtle
)
)
数组2:
Array
(
[0] => Array
(
[b_id] => 1
[name] => AC Slater
)
[1] => Array
(
[b_id] => 2
[name] => Lisa Turtle
)
[2] => Array
(
[b_id] => 3
[name] => Kelly Kapowski
)
)
我想得到什么:
Array
(
[0] => Array
(
[b_id] => 1
[name] => AC Slater
)
[1] => Array
(
[a_id] => 8
[b_id] => 2
[name] => Lisa Turtle
)
[2] => Array
(
[b_id] => 3
[name] => Kelly Kapowski
)
[3] => Array
(
[a_id] => 9
[name] => Mario Lopez
)
)
第三个数组合并键名匹配的两个第一个数组 我没有找到builtin function并尝试此解决方案但未成功:combine 2 associative arrays where values match。
谢谢,
编辑:对不起,我忘了添加马里奥洛佩兹。 我的尝试是:function array_extend($a, $b) {
foreach($b as $k=>$v) {
if( is_array($v) ) {
if( !isset($a[$k]) OR isset($v[0])) {
$a[$k] = $v;
} else {
$a[$k] = array_extend($a[$k], $v);
}
} else {
$a[$k] = $v;
}
}
return $a;
}
答案 0 :(得分:1)
这可能正是你要找的,虽然@OldPadawan已经在问题的评论中指出实际结果与提议的结果不同......
<?php
$a = [
[
'a_id' => 9,
'name' => 'Mario Lopez'
],
[
'a_id' => 8,
'name' => 'Lisa Turtle'
]
];
$b = [
[
'b_id' => 1,
'name' => 'AC Slater'
],
[
'b_id' => 2,
'name' => 'Lisa Turtle'
],
[
'b_id' => 3,
'name' => 'Kelly Kapowski'
]
];
$c = $a;
array_walk($b, function($be) use (&$c) {
$done = false;
array_walk($c, function(&$ce) use($be, &$done) {
if ($ce['name'] == $be['name']) {
$ce['b_id'] = $be['b_id'];
$done = true;
}
});
if ( ! $done) {
array_push($c, $be);
}
});
print_r($c);
上述代码的输出为:
Array
(
[0] => Array
(
[a_id] => 9
[name] => Mario Lopez
)
[1] => Array
(
[a_id] => 8
[name] => Lisa Turtle
[b_id] => 2
)
[2] => Array
(
[b_id] => 1
[name] => AC Slater
)
[3] => Array
(
[b_id] => 3
[name] => Kelly Kapowski
)
)