PHP

Menggunakan Filter Dengan Array Map di PHP

Salamat siang para pembaca, setelah beberapa tidak posting, kali ini saya akan membagikan source code php yang saya gunakan di Laravel yaitu memfilter data array di php menggunakan function array_map.

Fungsi array map disini digunakan untuk mengambil beberapa data saja sesuai yang kita inginkan, jika menggunakan query sql dengan data banyak tentu proses menampilkan data akan lambat dan performa website akan turun, oleh karena itu kita perlu menggunakan fungsi array.

Script dibawah ini adalah fungsi menggunakan array map untuk memfilter data dari hasil query di mysql :

public function performance_doc(Request $request)
{

$tglawal = $request->input('tglawal');
$tglakhir = $request->input('tglakhir');
$ap = $request->input('ap');
$sql = DB::select("SELECT a.jenisdoc, namaflok, pop, harga, bw, dpls, umur, fcr, ROUND(IFNULL((id/namaflok)*100,0),0) AS persen FROM (
SELECT jenisdoc,
COUNT(namaflok) AS namaflok,
SUM(ciawal) AS pop,
ROUND(SUM(valbbdoc)/SUM(ciawal),0) AS harga,
ROUND(SUM(cokg)/SUM(coekor),2) AS bw,
ROUND(SUM(rmsbantudpls)/SUM(ciawal),1) AS dpls,
ROUND(SUM(rmsbantuumur)/SUM(ciawal),1) AS umur,
ROUND(SUM(feedkgqty)/SUM(cokg),3) AS fcr
FROM vrhpp
WHERE region='$ap' AND rhpprugiproduksi <= 3000 AND tgldocfinal BETWEEN '$tglawal' AND '$tglakhir'
GROUP BY jenisdoc ASC
) a LEFT JOIN (
SELECT jenisdoc, COUNT(id) AS id FROM vrhpp WHERE region='$ap' AND rhpprugiproduksi > 0 AND tgldocfinal BETWEEN '$tglawal' AND '$tglakhir'
GROUP BY jenisdoc
) b ON b.jenisdoc = a.jenisdoc ORDER BY a.jenisdoc ASC");

$data = array_filter(array_map(function($item){
return [
'jenisdoc' => $item->jenisdoc,
'namaflok' => $item->namaflok,
'bw' => number_format($item->bw,2),
'dpls' => number_format($item->dpls,1),
'umur' => number_format($item->umur,1),
'fcr' => number_format($item->fcr,3),
'ip' => Helpers::ip($item->dpls,$item->bw,$item->fcr,$item->umur),
'rugi' => (int)$item->persen,
];

},$sql), function($item){
return empty(strpos($item['jenisdoc'],','));
});

$counts = count($data);
return response()->json(['success' => true, 'message' => 'get data successfully','count' => $counts, 'data' => $data], 200);
}

Leave a Reply

Your email address will not be published. Required fields are marked *

Back to top button