Php 如何合并两个数组的值?
我有两个阵列:Php 如何合并两个数组的值?,php,arrays,loops,merge,Php,Arrays,Loops,Merge,我有两个阵列: $a = array( array("id" => 132), array("id" => 131), array("id" => 129), array("id" => 128) ) $b = array( array("id" => 129, "attachment_id" => 111), array("id" => 129, "attachment_id" => 112),
$a = array(
array("id" => 132),
array("id" => 131),
array("id" => 129),
array("id" => 128)
)
$b = array(
array("id" => 129, "attachment_id" => 111),
array("id" => 129, "attachment_id" => 112),
array("id" => 132, "attachment_id" => 113),
array("id" => 132, "attachment_id" => 114),
array("id" => 132, "attachment_id" => 115)
)
我需要从这两个数组中创建一个数组<代码>id键必须是唯一的,因此不能重复。问题是:我需要在名为attachments
的新数组中创建新元素,该数组包含该id
的attachment\u id
值。您知道,对于id
,可能有多个附件\u id
这很难解释,但我希望你能理解!谢谢你的建议
编辑:
以下是期望的结果:
$c = array(
array("id" => 132, 'attachments' => array(113, 114, 115)),
array("id" => 131, 'attachments' => array()),
array("id" => 129, 'attachments' => array(111, 112)),
array("id" => 128, 'attachments' => array())
);
按“id”为数组编制索引,然后使用按“id”为数组编制索引,然后使用类似的方法:
# Temporary array
$c = array();
# Loop through all attachments and index them by id
foreach($b as $row) {
if(!isset($c[$row['id']])) {
$c[$row['id']] = array();
}
$c[$row['id']][] = $row['attachment_id'];
}
# Loop through ids and add attachments where available
foreach($a as &$row) {
$row['attachments'] = isset($c[$row['id']]) ? $c[$row['id']] : array()
} unset($row);
输出:
array(
array("id" => 132, "attachments" => array(113, 114, 115)),
array("id" => 131, "attachments" => array()),
array("id" => 129, "attachments" => array(111, 112)),
array("id" => 128, "attachments" => array())
)
像这样的东西应该可以做到:
# Temporary array
$c = array();
# Loop through all attachments and index them by id
foreach($b as $row) {
if(!isset($c[$row['id']])) {
$c[$row['id']] = array();
}
$c[$row['id']][] = $row['attachment_id'];
}
# Loop through ids and add attachments where available
foreach($a as &$row) {
$row['attachments'] = isset($c[$row['id']]) ? $c[$row['id']] : array()
} unset($row);
输出:
array(
array("id" => 132, "attachments" => array(113, 114, 115)),
array("id" => 131, "attachments" => array()),
array("id" => 129, "attachments" => array(111, 112)),
array("id" => 128, "attachments" => array())
)
比如:
$a = array(
array("id" => 132),
array("id" => 131),
array("id" => 129),
array("id" => 128)
);
$b = array(
array("id" => 129, "attachment_id" => 111),
array("id" => 129, "attachment_id" => 112),
array("id" => 132, "attachment_id" => 113),
array("id" => 132, "attachment_id" => 114),
array("id" => 132, "attachment_id" => 115)
);
$c = array();
foreach ($a as $idEntry) {
$tmp = array(
'id' => $idEntry['id'],
'attachments' => array()
);
foreach ($b as $bIdx => $attachmentEntry) {
if ($attachmentEntry['id'] == $idEntry['id']) {
$tmp['attachments'][] = $attachmentEntry['attachment_id'];
unset($b[$bIdx]);
}
}
$c[] = $tmp;
}
print_r($c);
比如:
$a = array(
array("id" => 132),
array("id" => 131),
array("id" => 129),
array("id" => 128)
);
$b = array(
array("id" => 129, "attachment_id" => 111),
array("id" => 129, "attachment_id" => 112),
array("id" => 132, "attachment_id" => 113),
array("id" => 132, "attachment_id" => 114),
array("id" => 132, "attachment_id" => 115)
);
$c = array();
foreach ($a as $idEntry) {
$tmp = array(
'id' => $idEntry['id'],
'attachments' => array()
);
foreach ($b as $bIdx => $attachmentEntry) {
if ($attachmentEntry['id'] == $idEntry['id']) {
$tmp['attachments'][] = $attachmentEntry['attachment_id'];
unset($b[$bIdx]);
}
}
$c[] = $tmp;
}
print_r($c);
@daGrevis“几乎”是因为??)请看我的问题的编辑。结果不是我想要的;(@daGrevis,也许你错过了,但我的回答给出了你想要的结果。我自己修复了。
$attachmentEntry['id']
必须是$attachmentEntry['attachment\u id']]
。有没有什么无痛的方法也可以将$a
的其他元素添加到$c
?@daGrevis“几乎”是因为???)请看我的问题的编辑。结果不是我想要的;(@daGrevis,也许你没有看到,但我的答案给出了你想要的结果。我自己修复了。$attachmentEntry['id']
必须是$attachmentEntry['attachment\u id']]
。是否有任何轻松的方法也可以将$a
的其他元素添加到$c
?