Объединить массив в PHP? - PullRequest
       7

Объединить массив в PHP?

0 голосов
/ 12 сентября 2009

У меня есть массив, который выглядит следующим образом:

Массив (

[0] => Array
    (
        [id] => 10
        [value] => 5
    )

[1] => Array
    (
        [id] => 10
        [value] => 1
    )

[2] => Array
    (
        [id] => 11
        [value] => 1
    )

[3] => Array
    (
        [id] => 11
        [value] => 1
    )

)

Как я могу объединить массив по идентификатору? Полученный массив, который я ищу, будет выглядеть примерно так:

Массив (

[0] => Array
    (
        [id] => 10
        [value] => 6
    )

[1] => Array
    (
        [id] => 11
        [value] => 2
    )

)

1 Ответ

2 голосов
/ 12 сентября 2009

Это не очень эффективная структура. Вы рассматривали возможность объединения в этой форме?

array
(
    10 => 6,
    11 => 2,
);

Это позволило бы быстрый поиск ключа по ID.

Чтобы объединить ваш первый массив в эту форму, просто сделайте это:

$array2 = array();
foreach($array1 as $row)
{
    if(isset($array2[$row['id']]))
        $array2[$row['id']] += $row['value'];
    else
        $array2[$row['id']] = $row['value'];
}

Что даст вам массив в виде:

$array2 = array
(
    10 => 6,
    11 => 2,
);

Если вам действительно нужно это в запрошенной форме, это сделает еще один цикл обработки ...

$array3 = array();
foreach($array2 as $id => $value)
{
    $array3[] = array('id' => $id, 'value' => $value);
}

Итак, поехали!

<ч />

И более компактный:

$array2 = array();
foreach($array1 as $row)
    $array2[$row['id']] = (isset($array2[$row['id']]) ? $array2[$row['id']] : 0) + $row['value'];

$array3 = array();
foreach($array2 as $id => $value)
    $array3[] = array('id' => $id, 'value' => $value);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...