簡體   English   中英

按鍵值對數組進行分組

[英]Group array by keys value

我已經四處搜尋,並且盡全力,所以我將使其變得容易。 這是我在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
        )

)

您所需的數組使用數字索引是否絕對必要? 如果我要這樣做,我會用這種方式(雖然與您想要的數組不同)

$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$y將包含原始數組中的y

$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[] = ...將表達式的右側添加到$result數組的末尾。

$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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM