@php // Input JSON $json = '{ "data" : [ { "kode_neraca": "1", "kode_lokasi": "C002", "no_tugas": "C002-TGS2412.001", "modul": "A", "nama": "Assets", "kode_induk": "00", "sum_header": "-", "tipe": "Header", "jenis_akun": "Neraca", "rowindex": "1", "level_spasi": "0", "level_lap": "1", "nik_user": "6703154108", "nilai": "0.0" }, { "kode_neraca": "11", "kode_lokasi": "C002", "no_tugas": "C002-TGS2412.001", "modul": "A", "nama": "Current Assets", "kode_induk": "1", "sum_header": "-", "tipe": "Header", "jenis_akun": "Neraca", "rowindex": "2", "level_spasi": "1", "level_lap": "1", "nik_user": "6703154108", "nilai": "0.0" }, { "kode_neraca": "1101", "kode_lokasi": "C002", "no_tugas": "C002-TGS2412.001", "modul": "A", "nama": "Cash", "kode_induk": "11", "sum_header": "11T", "tipe": "Posting", "jenis_akun": "Neraca", "rowindex": "3", "level_spasi": "2", "level_lap": "1", "nik_user": "6703154108", "nilai": "446088000.0" }, { "kode_neraca": "1102", "kode_lokasi": "C002", "no_tugas": "C002-TGS2412.001", "modul": "A", "nama": "Account Receivable", "kode_induk": "11", "sum_header": "11T", "tipe": "Posting", "jenis_akun": "Neraca", "rowindex": "4", "level_spasi": "2", "level_lap": "1", "nik_user": "6703154108", "nilai": "12054000.0" }, { "kode_neraca": "1103", "kode_lokasi": "C002", "no_tugas": "C002-TGS2412.001", "modul": "A", "nama": "Supplies", "kode_induk": "11", "sum_header": "11T", "tipe": "Posting", "jenis_akun": "Neraca", "rowindex": "5", "level_spasi": "2", "level_lap": "1", "nik_user": "6703154108", "nilai": "60000.0" }, { "kode_neraca": "1104", "kode_lokasi": "C002", "no_tugas": "C002-TGS2412.001", "modul": "A", "nama": "Prepaid Rent", "kode_induk": "11", "sum_header": "11T", "tipe": "Posting", "jenis_akun": "Neraca", "rowindex": "6", "level_spasi": "2", "level_lap": "1", "nik_user": "6703154108", "nilai": "24000000.0" }, { "kode_neraca": "11T", "kode_lokasi": "C002", "no_tugas": "C002-TGS2412.001", "modul": "A", "nama": "Total Current Assets", "kode_induk": "1", "sum_header": "1T", "tipe": "Summary", "jenis_akun": "Neraca", "rowindex": "7", "level_spasi": "1", "level_lap": "1", "nik_user": "6703154108", "nilai": "0.0" }, { "kode_neraca": "12", "kode_lokasi": "C002", "no_tugas": "C002-TGS2412.001", "modul": "A", "nama": "Fixed Assets", "kode_induk": "1", "sum_header": "-", "tipe": "Header", "jenis_akun": "Neraca", "rowindex": "8", "level_spasi": "1", "level_lap": "1", "nik_user": "6703154108", "nilai": "0.0" }, { "kode_neraca": "1201", "kode_lokasi": "C002", "no_tugas": "C002-TGS2412.001", "modul": "A", "nama": "Office Equipment", "kode_induk": "12", "sum_header": "12T", "tipe": "Posting", "jenis_akun": "Neraca", "rowindex": "9", "level_spasi": "2", "level_lap": "1", "nik_user": "6703154108", "nilai": "25000000.0" }, { "kode_neraca": "1202", "kode_lokasi": "C002", "no_tugas": "C002-TGS2412.001", "modul": "A", "nama": "Accumulated Depreciation of Office Equipment", "kode_induk": "12", "sum_header": "12T", "tipe": "Posting", "jenis_akun": "Neraca", "rowindex": "10", "level_spasi": "2", "level_lap": "1", "nik_user": "6703154108", "nilai": "-12916660.0" }, { "kode_neraca": "1203", "kode_lokasi": "C002", "no_tugas": "C002-TGS2412.001", "modul": "A", "nama": "Furniture", "kode_induk": "12", "sum_header": "12T", "tipe": "Posting", "jenis_akun": "Neraca", "rowindex": "11", "level_spasi": "2", "level_lap": "1", "nik_user": "6703154108", "nilai": "56700000.0" }, { "kode_neraca": "1204", "kode_lokasi": "C002", "no_tugas": "C002-TGS2412.001", "modul": "A", "nama": "Accumulated Depreciation of Furniture", "kode_induk": "12", "sum_header": "12T", "tipe": "Posting", "jenis_akun": "Neraca", "rowindex": "12", "level_spasi": "2", "level_lap": "1", "nik_user": "6703154108", "nilai": "-29295000.0" }, { "kode_neraca": "1205", "kode_lokasi": "C002", "no_tugas": "C002-TGS2412.001", "modul": "A", "nama": "Vehicle", "kode_induk": "12", "sum_header": "12T", "tipe": "Posting", "jenis_akun": "Neraca", "rowindex": "13", "level_spasi": "2", "level_lap": "1", "nik_user": "6703154108", "nilai": "150000000.0" }, { "kode_neraca": "1206", "kode_lokasi": "C002", "no_tugas": "C002-TGS2412.001", "modul": "A", "nama": "Accumulated Depreciation of Vehicle", "kode_induk": "12", "sum_header": "12T", "tipe": "Posting", "jenis_akun": "Neraca", "rowindex": "14", "level_spasi": "2", "level_lap": "1", "nik_user": "6703154108", "nilai": "-77500000.0" }, { "kode_neraca": "12T", "kode_lokasi": "C002", "no_tugas": "C002-TGS2412.001", "modul": "A", "nama": "Total Fixed Assets", "kode_induk": "1", "sum_header": "1T", "tipe": "Summary", "jenis_akun": "Neraca", "rowindex": "15", "level_spasi": "1", "level_lap": "1", "nik_user": "6703154108", "nilai": "0.0" }, { "kode_neraca": "1T", "kode_lokasi": "C002", "no_tugas": "C002-TGS2412.001", "modul": "A", "nama": "Total Assets", "kode_induk": "00", "sum_header": "-", "tipe": "Summary", "jenis_akun": "Neraca", "rowindex": "16", "level_spasi": "0", "level_lap": "1", "nik_user": "6703154108", "nilai": "0.0" }, { "kode_neraca": "61", "kode_lokasi": "C002", "no_tugas": "C002-TGS2412.001", "modul": "M", "nama": "Modal Awal", "kode_induk": "00", "sum_header": "64", "tipe": "Posting", "jenis_akun": "Neraca", "rowindex": "1", "level_spasi": "0", "level_lap": "1", "nik_user": "6703154108", "nilai": "-426488840.0" }, { "kode_neraca": "63", "kode_lokasi": "C002", "no_tugas": "C002-TGS2412.001", "modul": "M", "nama": "Prive", "kode_induk": "00", "sum_header": "64", "tipe": "Posting", "jenis_akun": "Neraca", "rowindex": "3", "level_spasi": "0", "level_lap": "1", "nik_user": "6703154108", "nilai": "0.0" }, { "kode_neraca": "64", "kode_lokasi": "C002", "no_tugas": "C002-TGS2412.001", "modul": "M", "nama": "Modal Akhir", "kode_induk": "00", "sum_header": "-", "tipe": "Summary", "jenis_akun": "Neraca", "rowindex": "4", "level_spasi": "0", "level_lap": "1", "nik_user": "6703154108", "nilai": "0.0" }, { "kode_neraca": "2", "kode_lokasi": "C002", "no_tugas": "C002-TGS2412.001", "modul": "P", "nama": "PASSIVA", "kode_induk": "00", "sum_header": "-", "tipe": "Header", "jenis_akun": "Neraca", "rowindex": "1", "level_spasi": "0", "level_lap": "1", "nik_user": "6703154108", "nilai": "0.0" }, { "kode_neraca": "21", "kode_lokasi": "C002", "no_tugas": "C002-TGS2412.001", "modul": "P", "nama": "Current Liabilities", "kode_induk": "2", "sum_header": "21T", "tipe": "Header", "jenis_akun": "Neraca", "rowindex": "2", "level_spasi": "1", "level_lap": "1", "nik_user": "6703154108", "nilai": "0.0" }, { "kode_neraca": "2101", "kode_lokasi": "C002", "no_tugas": "C002-TGS2412.001", "modul": "P", "nama": "Account Payable", "kode_induk": "21", "sum_header": "-", "tipe": "Posting", "jenis_akun": "Neraca", "rowindex": "3", "level_spasi": "2", "level_lap": "1", "nik_user": "6703154108", "nilai": "-17150000.0" }, { "kode_neraca": "2102", "kode_lokasi": "C002", "no_tugas": "C002-TGS2412.001", "modul": "P", "nama": "Accrued Income", "kode_induk": "21", "sum_header": "-", "tipe": "Posting", "jenis_akun": "Neraca", "rowindex": "4", "level_spasi": "2", "level_lap": "1", "nik_user": "6703154108", "nilai": "0.0" }, { "kode_neraca": "2103", "kode_lokasi": "C002", "no_tugas": "C002-TGS2412.001", "modul": "P", "nama": "Tax Payable", "kode_induk": "21", "sum_header": "-", "tipe": "Posting", "jenis_akun": "Neraca", "rowindex": "5", "level_spasi": "2", "level_lap": "1", "nik_user": "6703154108", "nilai": "0.0" }, { "kode_neraca": "21T", "kode_lokasi": "C002", "no_tugas": "C002-TGS2412.001", "modul": "P", "nama": "Total Current Liabilities", "kode_induk": "2", "sum_header": "2T", "tipe": "Summary", "jenis_akun": "Neraca", "rowindex": "6", "level_spasi": "1", "level_lap": "1", "nik_user": "6703154108", "nilai": "0.0" }, { "kode_neraca": "22", "kode_lokasi": "C002", "no_tugas": "C002-TGS2412.001", "modul": "P", "nama": "Long Term Liabilities", "kode_induk": "2", "sum_header": "24", "tipe": "Header", "jenis_akun": "Neraca", "rowindex": "7", "level_spasi": "1", "level_lap": "1", "nik_user": "6703154108", "nilai": "0.0" }, { "kode_neraca": "2201", "kode_lokasi": "C002", "no_tugas": "C002-TGS2412.001", "modul": "P", "nama": "Bank Loan", "kode_induk": "22", "sum_header": "-", "tipe": "Posting", "jenis_akun": "Neraca", "rowindex": "8", "level_spasi": "2", "level_lap": "1", "nik_user": "6703154108", "nilai": "-150551500.0" }, { "kode_neraca": "24", "kode_lokasi": "C002", "no_tugas": "C002-TGS2412.001", "modul": "P", "nama": "Total Long Term Liabilities", "kode_induk": "2", "sum_header": "2T", "tipe": "Summary", "jenis_akun": "Neraca", "rowindex": "9", "level_spasi": "1", "level_lap": "1", "nik_user": "6703154108", "nilai": "0.0" }, { "kode_neraca": "2T", "kode_lokasi": "C002", "no_tugas": "C002-TGS2412.001", "modul": "P", "nama": "Total Liabilities", "kode_induk": "00", "sum_header": "23T", "tipe": "Summary", "jenis_akun": "Neraca", "rowindex": "10", "level_spasi": "0", "level_lap": "1", "nik_user": "6703154108", "nilai": "0.0" }, { "kode_neraca": "3", "kode_lokasi": "C002", "no_tugas": "C002-TGS2412.001", "modul": "P", "nama": "Capital", "kode_induk": "00", "sum_header": "3T", "tipe": "Header", "jenis_akun": "Neraca", "rowindex": "11", "level_spasi": "0", "level_lap": "1", "nik_user": "6703154108", "nilai": "0.0" }, { "kode_neraca": "3101", "kode_lokasi": "C002", "no_tugas": "C002-TGS2412.001", "modul": "P", "nama": "Capital", "kode_induk": "3", "sum_header": "-", "tipe": "Posting", "jenis_akun": "Neraca", "rowindex": "12", "level_spasi": "1", "level_lap": "1", "nik_user": "6703154108", "nilai": "-426488840.0" }, { "kode_neraca": "3T", "kode_lokasi": "C002", "no_tugas": "C002-TGS2412.001", "modul": "P", "nama": "Total Capital", "kode_induk": "00", "sum_header": "23T", "tipe": "Summary", "jenis_akun": "Neraca", "rowindex": "13", "level_spasi": "0", "level_lap": "1", "nik_user": "6703154108", "nilai": "0.0" }, { "kode_neraca": "23T", "kode_lokasi": "C002", "no_tugas": "C002-TGS2412.001", "modul": "P", "nama": "Total Pasiva dan Equity", "kode_induk": "00", "sum_header": "-", "tipe": "Summary", "jenis_akun": "Neraca", "rowindex": "14", "level_spasi": "0", "level_lap": "1", "nik_user": "6703154108", "nilai": "0.0" } ] }'; // Decode JSON $data = json_decode($json, true); // Create a reference array for easy access $items = []; foreach ($data['data'] as &$item) { $items[$item['kode_neraca']] = &$item; } // Function to calculate the total for a parent node based on `kode_induk` function calculateTotal(&$items, $kodeNeraca) { $total = 0; foreach ($items as &$item) { if ($item['kode_induk'] === $kodeNeraca) { // If the child is a Posting type, add its value if ($item['tipe'] === 'Posting') { $total += (float)$item['nilai']; } // If the child is a Header type, recursively calculate its total if ($item['tipe'] === 'Header') { $total += calculateTotal($items, $item['kode_neraca']); } } } return $total; } // Update 'nilai' for Header rows foreach ($data['data'] as &$item) { if ($item['tipe'] === 'Header') { $item['nilai'] = (string)calculateTotal($items, $item['kode_neraca']); } } $items = []; foreach ($data['data'] as &$item) { $items[$item['kode_neraca']] = &$item; } // Function to calculate the total for a parent node based on `sum_header` function calculateTotalSum(&$items, $kodeNeraca) { $total = 0; foreach ($items as &$item) { if ($item['sum_header'] === $kodeNeraca) { $total += (float)$item['nilai']; } } return $total; } foreach ($data['data'] as &$item) { if ($item['tipe'] === 'Summary') { $item['nilai'] = (string)calculateTotalSum($items, $item['kode_neraca']); } } // Encode back to JSON $resultJson = json_encode($data, JSON_PRETTY_PRINT); // Output updated JSON echo $resultJson; @endphp