簡體   English   中英

如何組合具有相同值的數組

[英]How to combine array with same values

好吧,所以不是 100% 確定如何正確地問這個問題,但我有一個數組,我試圖根據每小時合並和分組,然后在該時間下每年的數據。

我當前的數組如下所示:

[
  {
    "name": "7:00 AM",
    "data": [
      {
        "x": "2019",
        "y": 1
      }
    ]
  }, 
  {
    "name": "7:00 AM",
    "data": [
      {
        "x": "2020",
        "y": 221
      }
    ]
  }
]

因此,我希望根據name值將它們組合成一個數組,然后將組合所有data

[
  {
    "name": "7:00 AM",
    "data": [
      {
        "x": "2019",
        "y": 1
      },
      {
        "x": "2020",
        "y": 221
      }
    ]
  }
]

編輯:為了添加我最初獲取和格式化這些值的方式,我正在使用 Larvel 並運行以下查詢:

$shipments = Orders::whereNotNull('shipped_at')->groupBy(DB::raw('YEAR(created_at)'))->selectRaw('count(*) as count, HOUR(shipped_at) as hour')->selectRaw("DATE_FORMAT(created_at, '%Y') label")->orderBy('label')->orderBy('hour')->groupBy('hour')->get();

這給了我以下數據:

在此處輸入圖像描述

然后我像這樣構建原始數組:

$shipping_chart_year = [];
    foreach ($shipments as $item) {
        $hour = Carbon::parse($item['hour'] . ':00:00')->timezone('America/Chicago')->format('g:i A');
        $shipping_chart_year[] = ['name' => $hour, 'data' => [['x' => $item['label'], 'y' => $item['count']]]];
    }

此函數按照您的預期格式化數組。

function formatArray($array){
    $response = [];
    $keysIndexes = [];
    foreach($array as $value) {
        if(!array_key_exists($value['name'], $keysIndexes)) {
            array_push($response, $value);
            $keysIndexes[$value['name']] = sizeof($keysIndexes);
        } else {
            array_push($response[$keysIndexes[$value['name']]]['data'], $value['data'][0]);
        }
    }
    return $response;
}

如果你想用 Laravel Collections 來實現這一點(你可以用它做很多事情)。 在這里你 go (基於你當前的數組結構)。

它更具可讀性並且更容易實現。

$output = collect(json_decode($data, true))
    ->groupBy('name')
    ->transform(function ($items, $name) {
        // Merge nested arrays into one
        $data = $items->map(function ($item) {
            return $item['data'][0];
        })->toArray();

        return [
            'name' => $name,
            'data' => $data,
        ];
    })
    ->values() // removes the key 
    ->toJson(); // returns the collection to json

暫無
暫無

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

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