将关联数组映射到另一个关联数组
mapping associative array with another associative array
我找到了解决问题的方法,但我想看看是否有更好或更明确的解决方案。我有两个这样的关联数组:
$person= [
"A" => [
"sur" => "a",
"fir" => "andras"
],
"C" => [
"sur" => "b",
"fir" => "balint"
]
];
$data = [
"A" => ["011", "012", "013"],
"C" => ["021", "022"]
];
如果两个数组的键值相等,我想映射它们。所以结果应该是这样的:
$person= [
"A" => [
"sur" => "a",
"fir" => "andras",
"tel" => ["011", "012", "013"]
],
"C" => [
"sur" => "b",
"fir" => "balint",
"tel" => ["021", "022"]
]
];
我的代码:
foreach ( array_intersect_key(array_keys($data,$person)) as $id) {
$person[$id]['tel'] = $data[$id];
}
我觉得你的方法不错。对于您的示例,我会这样做:
array_walk($person, function(&$v, $k) use ($data) {
$v['tel'] = $data[$k];
});
仅仅是因为当我回到几个月后的代码时,我可以很快看到我正在迭代和更改数组,因为我使用 array_walk - 我认为这真的是个人喜好。
看起来你想循环两个具有相同索引的数组...
所以试试这个
foreach ($person as $key => $value) {
$person[$key]['tel'] = $data[$key];
}
var_dump($person);
我找到了解决问题的方法,但我想看看是否有更好或更明确的解决方案。我有两个这样的关联数组:
$person= [
"A" => [
"sur" => "a",
"fir" => "andras"
],
"C" => [
"sur" => "b",
"fir" => "balint"
]
];
$data = [
"A" => ["011", "012", "013"],
"C" => ["021", "022"]
];
如果两个数组的键值相等,我想映射它们。所以结果应该是这样的:
$person= [
"A" => [
"sur" => "a",
"fir" => "andras",
"tel" => ["011", "012", "013"]
],
"C" => [
"sur" => "b",
"fir" => "balint",
"tel" => ["021", "022"]
]
];
我的代码:
foreach ( array_intersect_key(array_keys($data,$person)) as $id) {
$person[$id]['tel'] = $data[$id];
}
我觉得你的方法不错。对于您的示例,我会这样做:
array_walk($person, function(&$v, $k) use ($data) {
$v['tel'] = $data[$k];
});
仅仅是因为当我回到几个月后的代码时,我可以很快看到我正在迭代和更改数组,因为我使用 array_walk - 我认为这真的是个人喜好。
看起来你想循环两个具有相同索引的数组... 所以试试这个
foreach ($person as $key => $value) {
$person[$key]['tel'] = $data[$key];
}
var_dump($person);