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
]);
}