簡體   English   中英

如果鍵值相同,如何添加數組

[英]How to add array if key value is same

嗨,我很難追蹤多維數組。

[
    0 => array:7 [
        "date" => "2016-01-19"
        "placement_id" => 1
        "requests" => 18
        "revenue" => 1
    ],
    1 => array:7 [
        "date" => "2016-01-19"
        "placement_id" => 1
        "requests" => 2
        "revenue" => 0.2
    ]
];

如果place_id是相同的,我想要結果數組:

        1 => array:7 [
            "date" => "2016-01-19"
            "placement_id" => 1
            "requests" => 20
            "revenue" => 1.2
        ]

要求是產生具有以下內容的輸出數組:

  • 具有相同“ placement_id”的項目具有“請求”和revenue總和。
  • 輸出數組中條目的鍵將是“ placement_id”。

這意味着輸出數組將小於輸入數組。

我決定使用array_reduce函數。 沒有特殊的原因, foreach循環可以正常工作。 它沒有任何效率。 只是不同而已。

關於array_reduce的重要一點是$carry (累加器)可以是一個array ...

Eval.in的工作示例

編碼:

$outArray = array();

$outArray = array_reduce($src,
                  function($carry, $item)  { // accumulate values if possible

                      $carryKey = $item['placement_id']; // array key

                      if (isset($carry[$carryKey])) { // accumulate values

                          $carry[$carryKey]['requests'] += $item['requests'];
                          $carry[$carryKey]['revenue'] += $item['revenue'];

                      } else { // is new - add to the output...

                          $carry[$carryKey] = $item;
                      }
                      return $carry;
                  },
                  array() /* accumulator ($carry) is an internal variable */);

輸出數組:

array (2) [
    '1' => array (4) [
        'date' => string (10) "2016-01-19"
        'placement_id' => integer 1
        'requests' => integer 20
        'revenue' => float 1.2
    ]
    '666' => array (4) [
        'date' => string (10) "2016-04-01"
        'placement_id' => integer 666
        'requests' => integer 266
        'revenue' => float 666.20000000000005
    ]
]

測試數據:

$src = array(
    0 => array(
        "date" => "2016-01-19",
        "placement_id" => 1,
        "requests" => 18,
        "revenue" => 1,
    ),
    1 => array(
        "date" => "2016-04-01",
        "placement_id" => 666,
        "requests" => 266,
        "revenue" => 666.2,
    ),
    2 => array(
        "date" => "2016-01-19",
        "placement_id" => 1,
        "requests" => 2,
        "revenue" => 0.2,
    ),
);

使用該$arr參數作為您顯示的數組,我們可以創建一個像這樣的函數來查找重復的id並將它們聚合。 $output數組將返回結果。

public function checkArray($arr) {

    $output = array();
    $deleted = array();
    foreach($arr as $key => $value){
        if (!in_array($key, $deleted)) {
            $entry = array();
            $entry['date'] = $value['date'];
            $entry['placement_id'] = $value['placement_id'];
            $entry['requests'] = $value['requests'];
            $entry['revenue'] = $value['revenue'];
            foreach($arr as $key2 => $value2){
                if($key != $key2 && $value['placement_id'] == $value2['placement_id']){
                    $entry['requests'] += $value2['requests'];
                    $entry['revenue'] += $value2['revenue'];
                    $deleted[] = $key2;
                }
            }
            $output[] = $entry;
         }
    }
    return $output;
}

暫無
暫無

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

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