2011-09-14 118 views
0

我已經搜索過四處尋找,並且我處在我的智慧結局之中,所以我會讓這一切變得簡單。這是我在的print_r:由鍵值組的數組值

Array 
(
    [0] => Array 
     (
      [name] => client interaction 
      [y] => 2.7 
     ) 

    [1] => Array 
     (
      [name] => client interaction 
      [y] => 0.1 
     ) 

    [2] => Array 
     (
      [name] => project planning 
      [y] => 0.1 
     ) 

    [3] => Array 
     (
      [name] => client interaction 
      [y] => 5.9 
     ) 

) 

而這正是我希望它是:

Array 
(
    [0] => Array 
     (
      [name] => client interaction 
      [y] => 8.7 
     ) 

    [1] => Array 
     (
      [name] => project planning 
      [y] => 0.1 
     ) 

) 
+0

沒有一個 「簡單的方法」。只需遍歷原始數組,然後構建另一個按名稱索引的數組。 – Candide

回答

2
$hash = array(); 
foreach ($sourceArray as $key=>$value) { 
    $y = 0; 
    if (isset($hash{$value{'name'}})) { 
     $y = $hash{$value{'name'}}; 
    } 

    $hash{$value{'name'}} = $y + $value{'y'}; 
} 

$result = array(); 
foreach ($hash as $key => $value) { 
    $result[] = array('name' => $key, 'value' => $value); 
} 
print_r($result); 

最後一個循環是剛拿到$hash到您指定的確切格式。


說明:

$hash 

是用於計算每個唯一的名稱和的臨時結構。

foreach ($sourceArray as $key=>$value) { 

這通過您的原始數組($ sourceArray)並拉出每個元素。

$y = 0; 

初始化一個變量以存儲該名稱所屬的當前總和。

if (isset($hash{$value{'name'}})) { 

檢查值是否已存儲在給定名稱的$hash中。

 $y = $hash{$value{'name'}}; 
    } 

將$ y設置爲先前計算的給定名稱的總和(如果有的話)。

$hash{$value{'name'}} = $y + $value{'y'}; 
} 

將給定名稱的總和存儲到我們的臨時結構$hash中。

$result = array(); 
    foreach ($hash as $key => $value) { 
     $result[] = array('name' => $key, 'value' => $value); 
    } 

將$ hash轉換爲您所需的格式。

$result[] = ...中的empy []在$result數組的末尾添加表達式的右側。

+0

嗨。難道看起來這行中的操作數是倒置的嗎? '$ y = $ hash {$ value {'name'}};'我想你的意思是'$ hash {$ value {'name'}} = $ y;' –

+0

nope,這是正確的。該行正在將y初始化爲之前在下一行添加的內容。 –

+0

啊..謝謝。我以爲我看到了'!isset' +1 –

4

所需的數組是否絕對需要使用數字元?如果我要做到這一點我會做這種方式(不一樣的你想要的陣列雖然)

$newArray = array(); 
foreach($array as $item) 
{ 
    if(!isset($newArray[$item["name"]])) 
    $newArray[$item["name"]] = 0; 

    $newArray[$item["name"]] += $item["y"]; 
} 

這會給你這個結構的陣列:

Array 
(
    [client interaction] => 8.7 
    [project planning] => 0.1 
) 

要拿到鑰匙回到您只需使用foreach循環

foreach($newArray as $name => $y) 

$name的第二種形式將包含name$yy在您的原始數組中。

0
$mixed = array(); // Should contain your array shown above 
$groups = array(); 
$newArray = array(); // Will contain your new array 
$counter = 0; 

foreach($mixed as $mix) 
{ 
    if (isset($groups[$mix['name']])) 
    { 
     $newArray[$groups[$mix['name']]]['y'] += $mix['y']; 
    } 
    else 
    { 
     $groups[$mix['name']] = $counter; 
     $newArray[] = $mix; 
     $counter++; 
    } 
} 

http://codepad.org/EjdHxgvt