Как объединить значения двух массивов? - PullRequest
1 голос
/ 20 июля 2011

У меня есть два массива:

$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, который является массивом и содержит значения attachment_id для этого id.Понимаете, может быть больше, чем один attachment_id для 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())
);

Ответы [ 3 ]

1 голос
/ 20 июля 2011

Что-то вроде этого должно сделать это:

# 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())
)
1 голос
/ 20 июля 2011

Что-то вроде:

$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);
0 голосов
/ 20 июля 2011

Индексируйте свои массивы по 'id' и затем используйте http://php.net/manual/en/function.array-merge.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...