groupBy('kdKriteria')->map(function ($grouped) { return $grouped->max('nilai'); }); // Loop untuk mengumpulkan data untuk setiap balita foreach ($balita as $b) { $kdbalita = $b->kdbalita; $namaBalita = $b->balita; // Mengonversi nilai-nilai balita terpilih ke dalam bentuk array $nilaiBalita = $nilai->where('kdbalita', $kdbalita)->toArray(); // Normalisasi nilai berdasarkan nilai maksimum untuk setiap kdKriteria $normalizedNilai = array_map(function ($nilaiItem) use ($kriteria, $maxNilaiByKriteria) { $matchingKriteria = $kriteria->where('kdKriteria', $nilaiItem['kdKriteria'])->first(); if ($matchingKriteria) { $kdKriteria = $matchingKriteria->kdKriteria; // Normalisasi nilai menggunakan nilai maksimum yang sesuai untuk setiap kdKriteria $maxValueForKriteria = $maxNilaiByKriteria->get($kdKriteria); if ($maxValueForKriteria) { $normalizedValue = $nilaiItem['nilai'] / $maxValueForKriteria; } $nilaiItem['bobot'] = $matchingKriteria->bobot; $nilaiItem['kriteria'] = $matchingKriteria->kriteria; $nilaiItem['normalized'] = $normalizedValue; $nilaiItem['nilaimaximum'] = $maxValueForKriteria; $nilaiItem['nilai_preferensi'] = $normalizedValue * $nilaiItem['bobot']; } return $nilaiItem; }, $nilaiBalita); // Menghitung total preferensi untuk balita $totalPreferensi = array_sum(array_column($normalizedNilai, 'nilai_preferensi')); // Menentukan kategori gizi if ($totalPreferensi > 90) { $kategoriGizi = 'Gizi Baik'; } elseif ($totalPreferensi >= 81 && $totalPreferensi <= 90) { $kategoriGizi = 'Gizi Sedang'; } elseif ($totalPreferensi >= 71 && $totalPreferensi <= 80) { $kategoriGizi = 'Gizi Kurang'; } else { $kategoriGizi = 'Gizi Buruk'; } // Get additional data $tanggal_timbang = dataBalita::where('nama_balita', $namaBalita)->value('tanggal_timbang'); $berat_badan = dataBalita::where('nama_balita', $namaBalita)->value('berat_badan'); $tinggi_badan = dataBalita::where('nama_balita', $namaBalita)->value('tinggi_badan'); // Menambahkan hasil kategori gizi tanpa melakukan perankingan $output[] = [ 'kdbalita' => $kdbalita, 'nama_balita' => $namaBalita, 'nilai' => $nilaiBalita, 'berat_badan' => $berat_badan, 'tinggi_badan' => $tinggi_badan, 'tanggal_timbang' => $tanggal_timbang, 'normalized_nilai' => $normalizedNilai, 'total_preferensi' => $totalPreferensi, 'kategori_gizi' => $kategoriGizi, ]; } // Mengurutkan hasil berdasarkan total preferensi usort($output, function ($a, $b) { return $b['total_preferensi'] <=> $a['total_preferensi']; }); // Menambahkan peringkat ke output $currentRank = 1; $previousTotalPreferensi = null; foreach ($output as &$item) { // Mengatur peringkat hanya ketika total preferensi berbeda dari entri sebelumnya if ($item['total_preferensi'] !== $previousTotalPreferensi) { $item['ranking'] = $currentRank; } // Increment the rank $currentRank++; } // Mengurutkan hasil berdasarkan kdbalita usort($output, function ($a, $b) { return $a['kdbalita'] <=> $b['kdbalita']; }); return view('pages.proses.index', [ 'output' => $output, ]); } }