2017-02-20 47 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 
     ) 

)