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