2017-02-20 5 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_idを多次元配列内に格納し、それらの '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 
     ) 

)