如何在嵌套数组上添加条件并在 laravel 中添加新值

问题描述 投票:0回答:1

我有按类型和月份名称分组的数据,我想在数据是否有 12 个月时设定条件。 如果不是,请添加月份。

这是我要检查的数据:

array:1 [▼ // app\Http\Controllers\DashboardController.php:50
  "RM" => array:1 [▼
    "Februari" => array:2 [▼
      0 => array:42 [▶]
      1 => array:42 [▶]
    ]
  ]
]

我尽力了,但我知道这根本不起作用。 这就是我想要做的,它破坏了应用程序

$months = ['Januari', 'Februari', 'Maret', 'April', 'Mei', 'Juni', 'Juli', 'Agustus', 'September', 'Oktober', 'November', 'Desember'];
                $transaksi_grouped = $transaksi->groupBy([fn ($data) => $data->jenis_pagu->jenis, 'periode'])->toArray();

                foreach ($transaksi_grouped as $type => $row) {
                    foreach ($row as $month => $data) {
                        foreach ($months as $value) {
                            if ($month != $value) {
                                $new_value = [$value => [0]];
                                array_push($transaksi_grouped[$value], $new_value);
                            }
                        }
                    }
                }

我想检查数据是否有月份,如果没有则添加月份。 这就是我所期望的:

array:1 [▼ // app\Http\Controllers\DashboardController.php:58
  "RM" => array:2 [▼
    "Januari" => []
    "Februari" => array:2 [▼
      0 => "data"
      1 => "data"
    ]
  ]
]

任何帮助对我来说都很有意义,提前致谢。

php arrays laravel foreach nested
1个回答
0
投票

我相信我已经成功解决了交易数据中缺失月份的问题。查看代码后,该解决方案现在似乎可以确保所有类型的交易都有一年中每个月的数据。通过模拟交易数据并对其进行迭代,我们通过添加缺失月份的空数组成功地填补了所有空白。这种方法可确保数据组织一致,从而更易于分析和使用。

$transaksi = [
        (object)['jenis_pagu' => (object)['jenis' => 'test1'], 'periode' => 'Januari', 'data' => ['dado1', 'dado2']],
        (object)['jenis_pagu' => (object)['jenis' => 'test1'], 'periode' => 'Februari', 'data' => ['dado3']],
        (object)['jenis_pagu' => (object)['jenis' => 'test2'], 'periode' => 'Februari', 'data' => ['dado4']],
    ];

    $months = ['Januari', 'Februari', 'Maret', 'April', 'Mei', 'Juni', 'Juli', 'Agustus', 'September', 'Oktober', 'November', 'Desember'];

    $transaksi_grouped = [];

    foreach ($transaksi as $data) {
        $jenis = $data->jenis_pagu->jenis;
        $periode = $data->periode;
        $data_value = $data->data ?? null;

        if (!isset($transaksi_grouped[$jenis])) {
            $transaksi_grouped[$jenis] = [];
        }

        if (!isset($transaksi_grouped[$jenis][$periode])) {
            $transaksi_grouped[$jenis][$periode] = [];
        }

        $transaksi_grouped[$jenis][$periode][] = $data_value;
    }

    foreach ($transaksi_grouped as &$type_data) {
        foreach ($months as $month) {
            if (!isset($type_data[$month])) {
                $type_data[$month] = [];
            }
        }
    }

    unset($type_data);
    dd($transaksi_grouped);

结果:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.