2017-02-20 12 views
-1

Вот мой многомерный массив:Объединение дублирующихся массивов внутри многомерного массива с ключом изменения значения в PHP

array(
array('object_id' => 10, 'score' => 1), 
array('object_id' => 11, 'score' => 1), 
array('object_id' => 12, 'score' => 1), 
array('object_id' => 11, 'score' => 1), 
array('object_id' => 10, 'score' => 1), 
array('object_id' => 14, 'score' => 1), 
) 

Мой ожидается из пут:

array(
    array('object_id' => 10, 'score' => 2), 
    array('object_id' => 11, 'score' => 2), 
    array('object_id' => 12, 'score' => 1), 
    array('object_id' => 14, 'score' => 1), 
    ) 

Устно, что мне нужно найти уникальные object_ids внутри многомерного массива и объединить их значение «score». Каков наиболее эффективный способ сделать это в php?

+0

Просто глядя на руководство было бы гораздо проще/быстрее, чем задача размещения на этот вопрос проверки HTTP: // php.net/manual/en/function.array-unique.php#116302 – bansi

ответ

1
$output = array(); 
foreach($array as $e) 
{ 
    if(isset($output[$e['object_id']])) 
    { 
     $output[$e['object_id']]['score']+=$e['score']; 
    }else 
    { 
     $output[$e['object_id']] = $e; 
    } 
} 

    print_r(array_values($output)); 

Вот тест

$ cat test.php 
<?php 

$array = array(
array('object_id' => 10, 'score' => 1), 
array('object_id' => 11, 'score' => 1), 
array('object_id' => 12, 'score' => 1), 
array('object_id' => 11, 'score' => 1), 
array('object_id' => 10, 'score' => 1), 
array('object_id' => 14, 'score' => 1), 
); 

$output = array(); 
foreach($array as $e) 
{ 
    if(isset($output[$e['object_id']])) 
    { 
     $output[$e['object_id']]['score']+=$e['score']; 
    }else 
    { 
     $output[$e['object_id']] = $e; 
    } 
} 

// Input 
print_r($array); 

// Output 
print_r(array_values($output)); 

?> 

Выход

$ php test.php 
Array 
(
    [0] => Array 
     (
      [object_id] => 10 
      [score] => 1 
     ) 

    [1] => Array 
     (
      [object_id] => 11 
      [score] => 1 
     ) 

    [2] => Array 
     (
      [object_id] => 12 
      [score] => 1 
     ) 

    [3] => Array 
     (
      [object_id] => 11 
      [score] => 1 
     ) 

    [4] => Array 
     (
      [object_id] => 10 
      [score] => 1 
     ) 

    [5] => Array 
     (
      [object_id] => 14 
      [score] => 1 
     ) 

) 
Array 
(
    [0] => Array 
     (
      [object_id] => 10 
      [score] => 2 
     ) 

    [1] => Array 
     (
      [object_id] => 11 
      [score] => 2 
     ) 

    [2] => Array 
     (
      [object_id] => 12 
      [score] => 1 
     ) 

    [3] => Array 
     (
      [object_id] => 14 
      [score] => 1 
     ) 

)