2009-09-12 4 views
0

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

массива (

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

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

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

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

)

Как я могу закрепили массив по идентификатору? Результирующий массив Я ищу бы что-то вроде:

Array (

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

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

)

ответ

2

Это не очень эффективная структура. Рассматривали ли вы его консолидацию в этой форме?

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); 
Смежные вопросы