Tutorial Array Pada PHP
Array_filter, Array_map, Array_reduce
Materi ini memiliki 1 buah lampiran. Namun Anda tidak dapat mengakses lampiran karena belum terdaftar di kursus ini. Klik disini untuk mendaftar.
Pada video ini kita akan melanjutkan pembahasan mengenai array functions, khususnya yang menggunakan callback atau callable, yaitu function array_filter, array_map dan array_reduce.
Kita mulai dari array_filter dahulu. Sesuai dengan namanya, filter, function ini berfungsi untuk menyaring nilai di dalam array sesuai dengan kode pada fungsi callback. Cara kerjanya adalah fungsi ini melakukan iterasi terhadap setiap nilai di dalam array, dan mengirimkannya sebagai argument pada fungsi callback. Apabila function callback mengembalikan nilai true, maka nilai tersebut dikembalikan sebagai array hasil. Namun apabila function callback mengembalikan nilai false, maka nilai tersebut dihilangkan.
Yang perlu diperhatikan disini adalah array_filter mengembalikan array baru dan tidak mengubah array asalnya. Fungsi juga tidak mengubah index pada array. Dan berhubung sebagian nilai di dalam array bisa hilang, maka ada kemungkinan index pada array hasilnya memiliki nomor yang berloncat. Apabila kita ingin menyusun ulang index pada hasil array_filter, maka kita bisa menggunakan fungsi array_values.
Kita coba praktek. Misalkan kita buat variable $numbers yang isinya diambil dari fungsi range dengan argument 11 dan 20. Kemudian kita var_dump variable $numbers. Maka kita mendapatkan array yang isinya nilai 11 hingga 20.
Misalkan kita hendak menyaring array ini untuk mengambil hanya nilai ganjil saja dengan menggunakan fungsi array_filter. Namun sebelumnya kita mesti menyiapkan dahulu fungsi untuk memeriksa apakah ganjil. Jadi kita buat dahulu function isOdd dengan parameter int $n. Bilangan ganjil adalah bilangan yang kalau kita bagi dengan 2 akan menyisakan 1. Jadi cara memeriksanya adalah kita return $n %2 === 1.
Kemudian kita panggil fungsi array_filter dengan argument $numbers dan fungsi isOdd. Kita pakai cara variable functions terlebih dahulu ya. Jadi nama fungsi kita tulis dalam bentuk string. Hasilnya kita simpan ke variable $result. Dan terakhir kita var_dump nilai dari $result.
Maka kita mendapatkan array yang isinya hanya bilangan ganjil. Ada beberapa hal yang perlu diperhatikan disini. Yang pertama adalah array $numbers tidak mengalami perubahan. Kemudian, fungsi array_filter hanya mengambil nilai yang ganjil, namun tidak mengubah nomor indexnya. Sehingga kalau kita lihat di array $result, terdapat banyak nomor index yang berloncat. Kalau kita ingin agar nomor index-nya diurutkan ulang, maka kita harus memanggil lagi fungsi array_values.
Nah, cara menggunakan function array_filter ini menjadi rumit karena kita harus menyediakan dahulu function yang menjadi callback-nya. Cara menulis kode seperti ini hanya kita gunakan kalau fungsi isOdd digunakan lagi pada bagian kode kita yang lain. Namun kalau kode callback hanya perlu kita gunakan sekali saja pada fungsi ini, maka lebih baik kita menggunakan cara lain dimana kita tidak perlu membuat function terlebih dahulu.
Kita sudah pernah belajar caranya di video sebelumnya ya. Namanya adalah Anonymous Function. Dengan menggunakan cara ini, maka kita bisa membuat callback tanpa perlu menyebutkan nama function-nya.
Bagaimana caranya? Nah, kita komentari dahulu kode sebelumnya. Kita akan membuat kode yang hasilnya sama persis dengan sebelumnya namun menggunakan Anonymous Function. Caranya kita bisa langsung panggil array_filter, dengan argument pertama $numbers. Terus argument keduanya kita langsung deklarasikan anynomous function. Kita tulis kata kunci function dengan parameter int $n. Kemudian kita buka kurung kurawal, dan kita tulis isi function-nya ya, yaitu return $n % 2 === 1. Setelah itu kita tutup kurung kurawal dan tutup kurung. Kalau kita jalankan, maka hasilnya sama persis ya. Namun kodenya menjadi lebih singkat dan tidak perlu memikirkan nama function untuk callback.
Nah, untuk Anonymous Function yang hanya terdiri dari satu baris kode seperti ini, bisa dipersingkat lagi dengan menggunakan Arrow Function. Kita sudah pernah belajar juga di video sebelumnya ya. Bagi teman-teman yang masih ingat, coba pause dahulu video ini dan tulis ulang kode array_filter dengan menggunakan Arrow Function.
Kita tulis ulang ya. Kita panggil array_filter dengan argument pertama $numbers. Argument kedua adalah kata kunci fn dengan parameter int $n, diikuti oleh anak panah dan kode $n % 2 === 1. Kemudian kita tutup kurung. Kalau kita jalankan, maka hasilnya masih sama persis dengan video sebelumnya, namun kodenya jauh lebih singkat.
Kita masuk ke function kedua, yaitu array_map. Array_map berfungsi untuk mengubah nilai di dalam array berdasarkan fungsi callback. Sama seperti array_filter, array_map juga melakukan iterasi terhadap setiap nilai di dalam array dan mengirimkannya sebagai argument pada fungsi callback. Nilai yang dihasilkan oleh callback akan menjadi nilai baru pada array hasil. Array_map mengembalikan array baru dan tidak mengubah array asal.
Kita langsung coba praktek ya. Misalkan kita buat array $numbers dengan nilai range(1, 5). Lalu kita buat variable $result untuk menampung hasil dari array_map. Nah, untuk array_map, urutan argument-nya berbeda dari array_filter ya. Callback-nya harus berada di argument pertama. Pertama kita coba dahulu membuat callback untuk mengubah nilai menjadi pangkat tiga. Kita tulis kata kunci fn dengan parameter int $n, kemudian tanda panah $n ** 3. Kemudian argument keduanya barulah array asal, yaitu $numbers.
Setelah itu kita var_dump $numbers dan $result. Perhatikan nilai pada $numbers tidak berubah ya. Masih tetap 1 hingga 5. Sedangkan nilai pada $result adalah nilai yang telah diubah menjadi pangkat 3.
Fungsi array_map ini juga bisa kita gunakan apabila kita ingin menuliskan nilai array di dalam tag html. Sebagai contoh, misalkan kita ingin membungkus nilai di dalam tag pembuka dan penutup li. Maka kita buat fungsinya menjadi:
$result = array_map(fn(int $n) => '
Kita coba jalankan ya. Maka kita mendapatkan sekarang nilai di dalam array $result berada di dalam tag li.
Kita masuk ke fungsi yang ketiga yaitu array_reduce. Diantara semua fungsi callback, konsep dari array_reduce ini adalah yang paling sulit untuk dipelajari. Kalau kita lihat dari namanya, reduce berarti mengurangi. Sedangkan kita sudah tau ya, bahwa array itu mengandung banyak nilai. Dengan menggunakan reduce, maka kita melakukan iterasi untuk mengurangi seluruh nilai di dalam array menjadi satu buah nilai tunggal.
Fungsi callback di dalam reduce harus memiliki 2 buah parameter. Parameter pertama adalah nilai yang akan dibawa ke iterasi selanjutnya. Nilai akhir dari parameter pertama inilah yang akan menjadi hasil dari fungsi array_reduce. Sedangkan parameter kedua adalah nilai yang dikandung oleh array.
Kita langsung praktek. Misalkan kita punya array $numbers dengan nilai 1 hingga 5. Kemudian kita akan menggunakan array_reduce untuk menghitung nilai total dari semua angka di dalam array. Kita buat variable $result untuk menampung hasil dari array_reduce. Argument pertama adalah array asalnya yaitu $numbers.
Argument kedua adalah callback untuk menghitung hasilnya. Callback harus memiliki 2 parameter ya, yang pertama kita beri nama int $total, sedangkan yang kedua adalah int $n. Setelah anak panah, kita tulis kodenya $total += $n. Kemudian argument ketiga adalah nilai awal dari $total, kita isikan dengan nilai 0.
Kita jalankan. Dan kita mendapatkan hasil integer 15. Sedangkan nilai dari array $numbers tidak mengalami perubahan.
Nah, kalau pada bahasa pemograman Javascript, saya mengajarkan cara menggunakan fungsi reduce seperti ini, untuk menghitung nilai total. Namun untuk PHP, contoh seperti ini sebenarnya kurang tepat ya. Karena pada PHP sudah ada function array_sum yang bisa menghitung nilai total, dan cara penggunaannya jauh lebih gampang. Kita tinggal buat variable $result untuk menampung hasil dari array_sum dengan argument $numbers. Kodenya jauh lebih sederhana, dan hasilnya sama persis.
Jadi sekarang kita lihat ke contoh penggunaan lain dari reduce ya. Misalkan kita hendak menggabungkan semua nilai di dalam array menjadi satu buah string tunggal, dimana setiap nilai dipisahkan dengan tanda koma.
Kita coba tulis kodenya ya. Kita buat variable $result untuk menampung nilai dari array_reduce. Argument pertama adalah $numbers. Argument kedua adalah callback, dengan parameter string $s dan $string n. Isinya adalah $s .= $n . ‘, ‘. Jadi kita menggabungkan string dari iterasi sebelumnya dengan nilai array sekarang ditambahkan dengan tanda koma dan spasi. Argument ketiga adalah nilai awal dari string $s yaitu string kosong.
Kalau kita jalankan, maka kita mendapatkan hasil ‘1, 2, 3, 4, 5, ‘. Mirip dengan method join pada Javascript ya. Hanya saja disini masih ada kekurangan yaitu setelah angka 5 masih ada tanda koma dan spasi. Mungkin nantinya teman-teman bisa modifikasi lagi cara penggunaan reduce-nya untuk menghilangkan tanda koma di bagian paling akhir.
Dengan menggunakan fasilitas tanya jawab, maka Anda bisa bertanya dan akan dijawab langsung oleh instruktur kursus.
Anda belum terdaftar pada kursus ini sehingga tidak bisa mengajukan pertanyaan.