Hitung
unknown
php
3 years ago
3.0 kB
3
Indexable
public function hitung(Request $request) { // get semua data penyakit $listPenyakit = Penyakit::all(); //mengambil data dari user melalui request $collected = json_decode($request->hasil); $result = array(); foreach ($listPenyakit as $penyakit) { // $penyakit = Penyakit::find(5); $rules = $penyakit->gejala()->get()->sortBy('kode'); $gUser = collect($collected); $hasil = $gUser->whereIn('kode', $rules->pluck('kode')); foreach ($hasil as $key => $value) { $hasil[$key] = collect($value)->put('nilai_pakar', $rules->firstWhere('kode', $value->kode)->pivot->nilai_pakar); } $gejalaUser = collect($hasil->values())->map(function ($value, $key) { return ['CF' => round($value['nilai_pakar'] * $value['nilai_user'], 2)]; }); // dd($gejalaUser->toArray()); $cfCombine = 0; foreach ($gejalaUser->values() as $key => $value) { $r = null; if ($gejalaUser->count() == 1) { $cfCombine = $value['CF']; $cfFinal = $cfCombine; $r = ([ 'id' => $penyakit->id, 'nama_penyakit' => $penyakit->nama, 'persentase' => round($cfFinal, 2) * 100, ]); break; } else { switch ($key) { case 0: $cf1 = $value['CF']; $cf2 = $gejalaUser->get(++$key)['CF']; $cf = $cf1 + $cf2 * (1 - $cf1); $cfCombine = $cf; break; case 1: break; case $gejalaUser->count(): break; default: $cfOld = $cfCombine; $currentCF = $value['CF']; $cf = $cfOld + ($currentCF * (1 - $cfOld)); $cfCombine = $cf; break; } //lempar resul combine ke variable $cfFinal = $cfCombine; $r = ([ 'id' => $penyakit->id, 'nama_penyakit' => $penyakit->nama, 'persentase' => round($cfFinal, 2) * 100, ]); } } //menambahkan data $result[] = $r; } usort( $result, function ($a, $b) { return $b['persentase'] <=> $a['persentase']; } ); return response()->json([ 'status' => true, 'data' => $result ]); }
Editor is loading...