2015-04-12 51 views
0

我試圖按'標籤'將以下數組分組,以給出每個人的總價值。按字段分組數組,並給出總價值

Array 
(
[0] => Array 
    (
     [label] => John 
     [value] => 84 
    ) 

[1] => Array 
    (
     [label] => Darren 
     [value] => 28 
    ) 

[2] => Array 
    (
     [label] => John 
     [value] => 20 
    ) 

[3] => Array 
    (
     [label] => Morgan 
     [value] => 20 
    ) 

[4] => Array 
    (
     [label] => Hannah 
     [value] => 14 
    ) 

[5] => Array 
    (
     [label] => Morgan 
     [value] => 14 
    ) 

[6] => Array 
    (
     [label] => Darren 
     [value] => 10 
    ) 
) 

這將是最終的結果:

Array 
(
[0] => Array 
    (
     [label] => John 
     [value] => 104 
    ) 

[1] => Array 
    (
     [label] => Darren 
     [value] => 38 
    ) 

[2] => Array 
    (
     [label] => Morgan 
     [value] => 34 
    ) 

[3] => Array 
    (
     [label] => Hannah 
     [value] => 14 
    ) 
) 

我假設我需要使用的foreach分組標籤在一起,但我堅持爲做到這一點的最好辦法。

回答

1

我會做這樣的事情(期待您的數組中$array):

// output array 
$newArray = array(); 

// loop over the input array 
foreach($array as $entry) { 
    // loop over the output array 
    foreach($newArray as &$currentEntry) { 
     // check if there is a the current label 
     if($currentEntry['label'] == $entry['label']) { 
      // if so, add the value and continue (also parent) 
      $currentEntry['value'] += $entry['value']; 
      continue 2; 
     } 
    } 
    // if the current label wan't found, it will get here and add an entry 
    array_push($newArray,$entry); 
} 

print_r($newArray); 
+0

工作出色 – juselliott

1

試試這個:

<?php 

$array = [ 
    ['label' => 'John', 
    'value' => '84'], 
    ['label' => 'Darren', 
    'value' => '28'], 
    ['label' => 'John', 
    'value' => '20'], 
    ['label' => 'Morgan', 
    'value' => '20'], 
    ['label' => 'Hannah', 
    'value' => '14'], 
    ['label' => 'Morgan', 
    'value' => '14'], 
    ['label' => 'Darren', 
    'value' => '10'] 
]; 

$final = []; 
foreach ($array as $arr) 
    $final[$arr['label']] = isset($final[$arr['label']]) ? $final[$arr['label']] + $arr['value'] : $arr['value']; 
$result = []; 
foreach ($final as $label => $value) 
    $result[] = ['label' => $label, 'value' => $value]; 

print_r($result); 

Output

Array 
(
    [0] => Array 
     (
      [label] => John 
      [value] => 104 
     ) 

    [1] => Array 
     (
      [label] => Darren 
      [value] => 38 
     ) 

    [2] => Array 
     (
      [label] => Morgan 
      [value] => 34 
     ) 

    [3] => Array 
     (
      [label] => Hannah 
      [value] => 14 
     ) 

)