MODUL PEMROGRAMAN WEBSITE 2
Mata Kuliah: Pemrograman Website 2
Kode MK: INF2419
SKS: 3 (Praktikum)
Semester: Genap 2025/2026
Program Studi: Informatika
Fakultas: FEBI / Saintek
Universitas: UIN K.H. Abdurrahman Wahid Pekalongan
Dosen Pengampu: Mohammad Reza Maulana, M.Kom
NIP: 199110082025051002
Pertemuan: 4 dari 16
Durasi: 150 menit (3 Ã 50 menit)
Studi Kasus Berkelanjutan: Sistem Manajemen Perpustakaan
PERTEMUAN 4
ARRAY & FUNCTION PHP
A. INFORMASI PERTEMUAN
| Aspek | Keterangan |
|---|---|
| Capaian Pembelajaran Lulusan (CPL) | CPL04: Menguasai konsep teoretis bidang ilmu komputer/informatika dan mampu memformulasikan penyelesaian masalah prosedural. |
| Capaian Pembelajaran Mata Kuliah (CPMK) | CPMK04.1: Memahami konsep dasar pengembangan web backend menggunakan PHP dan database |
| Sub-CPMK | Sub-CPMK04.1.2: Menjelaskan dan menggunakan sintaks dasar PHP untuk menghasilkan output dinamis (lanjutan - array & function) |
| Indikator Pencapaian | Mahasiswa mampu: 1. Menjelaskan dan menggunakan array indexed 2. Menjelaskan dan menggunakan array associative 3. Membuat dan menggunakan multidimensional array 4. Membuat function dengan parameter dan return value 5. Memahami scope variabel dalam PHP 6. Menggunakan include & require untuk modularisasi 7. Menerapkan array dan function dalam sistem perpustakaan |
| Alokasi Waktu | âĸ Teori: 60 menit âĸ Praktikum: 90 menit âĸ Total: 150 menit (3 Ã 50 menit) |
B. PENDAHULUAN
1. Deskripsi Singkat
Pertemuan keempat ini membahas dua konsep fundamental dalam pemrograman PHP: Array dan Function. Array memungkinkan penyimpanan multiple data dalam satu variabel, sedangkan function memungkinkan modularisasi code untuk reusability dan maintainability. Mahasiswa akan mempelajari berbagai jenis array (indexed, associative, multidimensional) dan cara membuat function yang efektif dalam konteks sistem perpustakaan.
2. Keterkaitan dengan Pertemuan Lain
Pertemuan ini merupakan kelanjutan dan fondasi penting:
- Pertemuan 2: Menggunakan variabel dan operator yang telah dipelajari
- Pertemuan 3: Menggabungkan array dengan loop untuk memproses data
- Pertemuan 5-7: Array dan function akan digunakan intensif dalam form handling dan CRUD
- Pertemuan 9-16: Konsep array menjadi dasar untuk memahami Eloquent ORM di Laravel
3. Manfaat Pembelajaran
- Mampu mengelola data dalam struktur yang terorganisir
- Dapat membuat code yang modular dan reusable
- Memahami cara menyimpan dan memproses data buku secara efisien
- Siap membuat library management functions
- Mengurangi code repetition dengan function
4. Relevansi dengan Studi Kasus
Dalam sistem perpustakaan, array dan function digunakan untuk:
- Menyimpan data multiple buku dalam array
- Membuat function untuk menampilkan buku
- Function untuk mencari buku berdasarkan ID atau judul
- Function untuk menghitung total buku, stok, dll
- Modularisasi code dengan include/require
C. MATERI TEORI
1. Array dalam PHP
a. Apa itu Array?
Array adalah struktur data yang dapat menyimpan multiple nilai dalam satu variabel. Bayangkan array seperti lemari dengan banyak laci - setiap laci bisa menyimpan satu item.
Analogi Perpustakaan:
- Variabel biasa = 1 buku
- Array = Rak buku yang bisa menyimpan banyak buku
Keuntungan Array:
- Mengelola data terkait dalam satu tempat
- Mudah diiterasi dengan loop
- Lebih efisien daripada banyak variabel terpisah
b. Array Indexed (Numerik)
Array dengan index berupa angka (dimulai dari 0).
Sintaks:
<?php
// Cara 1: Menggunakan array()
$buah = array("Apel", "Jeruk", "Mangga");
// Cara 2: Menggunakan [] (PHP 5.4+)
$buku = ["PHP", "MySQL", "Laravel"];
// Mengakses elemen
echo $buku[0]; // PHP
echo $buku[1]; // MySQL
echo $buku[2]; // Laravel
?>Contoh dalam Perpustakaan:
<?php
// Daftar judul buku
$judul_buku = [
"Pemrograman PHP",
"Database MySQL",
"Laravel Framework",
"JavaScript Basics",
"Web Design"
];
// Akses
echo $judul_buku[0]; // Pemrograman PHP
echo $judul_buku[4]; // Web Design
// Hitung jumlah
echo count($judul_buku); // 5
// Tambah elemen
$judul_buku[] = "React Native"; // Otomatis index 5
$judul_buku[6] = "Vue.js";
// Ubah elemen
$judul_buku[0] = "Pemrograman PHP Lanjut";
?>Built-in Array Functions:
<?php
$buku = ["PHP", "MySQL", "Laravel", "JavaScript"];
// Count - Hitung jumlah elemen
echo count($buku); // 4
// in_array - Cek apakah nilai ada
if (in_array("PHP", $buku)) {
echo "Buku PHP ada";
}
// array_push - Tambah di akhir
array_push($buku, "React");
// array_pop - Hapus elemen terakhir
$terakhir = array_pop($buku);
// array_shift - Hapus elemen pertama
$pertama = array_shift($buku);
// array_unshift - Tambah di awal
array_unshift($buku, "HTML");
// sort - Urutkan A-Z
sort($buku);
// rsort - Urutkan Z-A
rsort($buku);
// array_reverse - Balik urutan
$buku_terbalik = array_reverse($buku);
?>c. Array Associative (Key-Value)
Array dengan index berupa string (key), mirip dictionary/map.
Sintaks:
<?php
$buku = [
"judul" => "Pemrograman PHP",
"pengarang" => "Budi Raharjo",
"penerbit" => "Informatika",
"tahun" => 2023,
"harga" => 75000,
"stok" => 10
];
// Akses dengan key
echo $buku["judul"]; // Pemrograman PHP
echo $buku["pengarang"]; // Budi Raharjo
echo $buku["harga"]; // 75000
?>Contoh Lengkap:
<?php
// Data buku lengkap
$buku1 = [
"kode" => "BK-001",
"judul" => "Pemrograman PHP untuk Pemula",
"kategori" => "Programming",
"pengarang" => "Budi Raharjo",
"penerbit" => "Informatika",
"tahun" => 2023,
"isbn" => "978-602-1234-56-7",
"harga" => 75000,
"stok" => 10,
"tersedia" => true
];
// Tampilkan data
echo "Judul: " . $buku1["judul"] . "<br />";
echo "Harga: Rp " . number_format($buku1["harga"], 0, ',', '.') . "<br />";
echo "Stok: " . $buku1["stok"] . " buku<br />";
// Ubah nilai
$buku1["stok"] = 8;
$buku1["harga"] = 70000;
// Tambah key baru
$buku1["lokasi_rak"] = "A-12";
$buku1["bahasa"] = "Indonesia";
?>Array Associative Functions:
<?php
$buku = [
"judul" => "PHP Programming",
"harga" => 75000,
"stok" => 10
];
// array_keys - Ambil semua key
$keys = array_keys($buku);
print_r($keys); // ["judul", "harga", "stok"]
// array_values - Ambil semua value
$values = array_values($buku);
print_r($values); // ["PHP Programming", 75000, 10]
// array_key_exists - Cek key ada
if (array_key_exists("judul", $buku)) {
echo "Key judul ada";
}
// isset - Alternatif cek key
if (isset($buku["judul"])) {
echo "Key judul ada";
}
// unset - Hapus key
unset($buku["stok"]);
?>d. Multidimensional Array
Array yang berisi array lain (nested array).
1. Array 2 Dimensi:
<?php
// Array buku - setiap elemen adalah array associative
$buku_list = [
[
"kode" => "BK-001",
"judul" => "Pemrograman PHP",
"harga" => 75000,
"stok" => 10
],
[
"kode" => "BK-002",
"judul" => "MySQL Database",
"harga" => 95000,
"stok" => 5
],
[
"kode" => "BK-003",
"judul" => "Laravel Framework",
"harga" => 125000,
"stok" => 8
]
];
// Akses elemen
echo $buku_list[0]["judul"]; // Pemrograman PHP
echo $buku_list[1]["harga"]; // 95000
echo $buku_list[2]["stok"]; // 8
// Loop semua buku
foreach ($buku_list as $buku) {
echo "Judul: " . $buku["judul"] . "<br />";
echo "Harga: Rp " . number_format($buku["harga"], 0, ',', '.') . "<br />";
echo "Stok: " . $buku["stok"] . "<br /><br />";
}
// Loop dengan index
for ($i = 0; $i < count($buku_list); $i++) {
echo ($i + 1) . ". " . $buku_list[$i]["judul"] . "<br />";
}
?>2. Array 3 Dimensi (Perpustakaan dengan Kategori):
<?php
$perpustakaan = [
"Programming" => [
[
"judul" => "PHP Basics",
"harga" => 75000
],
[
"judul" => "Python Guide",
"harga" => 85000
]
],
"Database" => [
[
"judul" => "MySQL Fundamentals",
"harga" => 95000
],
[
"judul" => "PostgreSQL Advanced",
"harga" => 110000
]
]
];
// Akses
echo $perpustakaan["Programming"][0]["judul"]; // PHP Basics
echo $perpustakaan["Database"][1]["harga"]; // 110000
// Loop nested
foreach ($perpustakaan as $kategori => $buku_list) {
echo "<h3>Kategori: $kategori</h3>";
foreach ($buku_list as $buku) {
echo "- " . $buku["judul"] . "<br />";
}
}
?>e. Foreach Loop untuk Array
Loop khusus untuk array, lebih efisien dan readable.
Sintaks:
// Array indexed
foreach ($array as $value) {
// Gunakan $value
}
// Array associative
foreach ($array as $key => $value) {
// Gunakan $key dan $value
}Contoh:
<?php
// 1. Array indexed
$judul = ["PHP", "MySQL", "Laravel"];
foreach ($judul as $item) {
echo $item . "<br />";
}
// 2. Array indexed dengan key
foreach ($judul as $index => $item) {
echo ($index + 1) . ". $item<br />";
}
// 3. Array associative
$buku = [
"judul" => "PHP Programming",
"harga" => 75000,
"stok" => 10
];
foreach ($buku as $key => $value) {
echo "$key: $value<br />";
}
// 4. Multidimensional
$buku_list = [
["judul" => "PHP", "harga" => 75000],
["judul" => "MySQL", "harga" => 95000]
];
foreach ($buku_list as $buku) {
echo $buku["judul"] . " - Rp " . number_format($buku["harga"], 0, ',', '.') . "<br />";
}
?>2. Function dalam PHP
a. Apa itu Function?
Function adalah blok code yang dapat dipanggil berulang kali untuk melakukan tugas tertentu.
Analogi: Function seperti resep masakan - sekali ditulis, bisa digunakan berkali-kali.
Keuntungan Function:
- DRY Principle: Don't Repeat Yourself
- Modular: Code terorganisir dalam unit-unit kecil
- Reusable: Bisa dipakai berulang kali
- Maintainable: Mudah diperbaiki dan diupdate
- Testable: Mudah ditest secara terpisah
b. Membuat Function Sederhana
Sintaks:
function nama_function() {
// Code yang akan dijalankan
}
// Memanggil function
nama_function();Contoh:
<?php
// Definisi function
function salam() {
echo "Selamat datang di Perpustakaan!";
}
// Panggil function
salam(); // Output: Selamat datang di Perpustakaan!
// Function untuk tampilkan header
function tampilkan_header() {
echo "<h1>Sistem Perpustakaan</h1>";
echo "<p>Kelola buku dengan mudah</p>";
echo "<hr>";
}
tampilkan_header();
?>c. Function dengan Parameter
Parameter memungkinkan passing data ke function.
Sintaks:
function nama_function($parameter1, $parameter2) {
// Gunakan parameter
}
// Memanggil dengan argument
nama_function($nilai1, $nilai2);Contoh:
<?php
// 1. Satu parameter
function salam_nama($nama) {
echo "Halo, $nama! Selamat datang di perpustakaan.";
}
salam_nama("Budi"); // Halo, Budi! ...
salam_nama("Siti"); // Halo, Siti! ...
// 2. Multiple parameter
function info_buku($judul, $pengarang, $harga) {
echo "Judul: $judul<br />";
echo "Pengarang: $pengarang<br />";
echo "Harga: Rp " . number_format($harga, 0, ',', '.') . "<br />";
}
info_buku("PHP Programming", "Budi Raharjo", 75000);
// 3. Parameter dengan default value
function hitung_diskon($harga, $diskon = 10) {
$potongan = $harga * ($diskon / 100);
$harga_final = $harga - $potongan;
echo "Harga: Rp " . number_format($harga, 0, ',', '.') . "<br />";
echo "Diskon: $diskon%<br />";
echo "Potongan: Rp " . number_format($potongan, 0, ',', '.') . "<br />";
echo "Harga Final: Rp " . number_format($harga_final, 0, ',', '.') . "<br />";
}
hitung_diskon(100000); // Diskon 10% (default)
hitung_diskon(100000, 15); // Diskon 15%
?>d. Function dengan Return Value
Function dapat mengembalikan nilai dengan return.
Sintaks:
function nama_function() {
// Process
return $nilai;
}
$hasil = nama_function();Contoh:
<?php
// 1. Return nilai sederhana
function hitung_total($harga, $jumlah) {
$total = $harga * $jumlah;
return $total;
}
$total_bayar = hitung_total(75000, 3);
echo "Total: Rp " . number_format($total_bayar, 0, ',', '.');
// 2. Return dengan kondisi
function cek_stok($stok) {
if ($stok > 10) {
return "Stok Aman";
} elseif ($stok > 0) {
return "Stok Menipis";
} else {
return "Habis";
}
}
$status = cek_stok(5);
echo $status; // Stok Menipis
// 3. Return array
function get_info_buku() {
return [
"judul" => "PHP Programming",
"harga" => 75000,
"stok" => 10
];
}
$buku = get_info_buku();
echo $buku["judul"]; // PHP Programming
// 4. Return boolean
function is_tersedia($stok) {
return $stok > 0;
}
if (is_tersedia(5)) {
echo "Buku tersedia";
}
// 5. Early return
function validasi_harga($harga) {
if ($harga < 0) {
return false; // Early return
}
if ($harga < 10000) {
return false;
}
return true;
}
?>e. Scope Variabel
Scope menentukan di mana variabel bisa diakses.
1. Local Scope:
<?php
function test_local() {
$x = 5; // Local variabel
echo $x;
}
test_local(); // 5
// echo $x; // Error! $x tidak bisa diakses di luar function
?>2. Global Scope:
<?php
$x = 10; // Global variabel
function test_global() {
global $x; // Akses global variabel
echo $x; // 10
$x = 20; // Ubah global variabel
}
test_global();
echo $x; // 20
?>3. Static Variabel:
<?php
function counter() {
static $count = 0; // Nilai tetap antar pemanggilan
$count++;
echo $count . "<br />";
}
counter(); // 1
counter(); // 2
counter(); // 3
?>Best Practice:
- Hindari global variabel jika tidak perlu
- Gunakan parameter dan return value
- Minimize side effects
f. Function dalam Function
Contoh:
<?php
function hitung_diskon($harga, $persentase) {
return $harga * ($persentase / 100);
}
function hitung_total_bayar($harga, $jumlah, $diskon_persen = 0) {
$subtotal = $harga * $jumlah;
if ($diskon_persen > 0) {
$diskon = hitung_diskon($subtotal, $diskon_persen);
$total = $subtotal - $diskon;
} else {
$total = $subtotal;
}
return $total;
}
$total = hitung_total_bayar(75000, 3, 10);
echo "Total: Rp " . number_format($total, 0, ',', '.');
?>3. Include & Require
Untuk memecah code ke multiple file.
a. Include
<?php
// file: functions.php
function tampilkan_header() {
echo "<h1>Perpustakaan</h1>";
}
function tampilkan_footer() {
echo "<footer>Š 2024 Perpustakaan</footer>";
}
?>
<?php
// file: index.php
include 'functions.php';
tampilkan_header();
echo "<p>Konten halaman</p>";
tampilkan_footer();
?>b. Require
Sama dengan include, tapi jika file tidak ditemukan akan fatal error (stop script).
<?php
require 'functions.php'; // Harus ada, jika tidak error fatal
?>c. Include_once & Require_once
Memastikan file hanya di-include satu kali.
<?php
include_once 'functions.php';
require_once 'config.php';
?>Perbedaan:
| Aspek | include | require |
|---|---|---|
| Error jika file tidak ada | Warning, script lanjut | Fatal error, script stop |
| Kapan digunakan | File optional | File mandatory |
Best Practice:
- Gunakan
require_onceuntuk file krusial (config, functions) - Gunakan
include_onceuntuk file optional (templates)
D. PRAKTIKUM
1. Tujuan Praktikum
- Membuat dan menggunakan array indexed untuk data buku
- Membuat array associative untuk informasi buku lengkap
- Menggunakan multidimensional array untuk multiple buku
- Membuat function untuk display buku
- Membuat function untuk search buku
- Membuat function untuk hitung total
- Modularisasi code dengan include/require
2. PRAKTIKUM 1: Array Data Buku Perpustakaan
Tujuan
Memahami penggunaan array indexed dan associative untuk data perpustakaan.
Langkah-langkah
Buat file array_buku.php:
<!DOCTYPE html>
<html lang="id">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Array Data Buku</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.0/font/bootstrap-icons.css">
</head>
<body>
<div class="container mt-5">
<h1 class="mb-4"><i class="bi bi-book"></i> Array Data Buku Perpustakaan</h1>
<?php
// 1. ARRAY INDEXED - Daftar judul buku
$judul_buku = [
"Pemrograman PHP untuk Pemula",
"Mastering MySQL Database",
"Laravel Framework Advanced",
"JavaScript Fundamentals",
"Web Design Principles"
];
?>
<!-- Array Indexed -->
<div class="card mb-4">
<div class="card-header bg-primary text-white">
<h5 class="mb-0">1. Array Indexed - Daftar Judul Buku</h5>
</div>
<div class="card-body">
<p><strong>Total Buku:</strong> <?php echo count($judul_buku); ?></p>
<ol>
<?php foreach ($judul_buku as $judul): ?>
<li><?php echo $judul; ?></li>
<?php endforeach; ?>
</ol>
<hr>
<h6>Akses Elemen Spesifik:</h6>
<ul>
<li>Buku pertama: <strong><?php echo $judul_buku[0]; ?></strong></li>
<li>Buku ketiga: <strong><?php echo $judul_buku[2]; ?></strong></li>
<li>Buku terakhir: <strong><?php echo $judul_buku[count($judul_buku) - 1]; ?></strong></li>
</ul>
</div>
</div>
<?php
// 2. ARRAY ASSOCIATIVE - Data buku lengkap
$buku1 = [
"kode" => "BK-001",
"judul" => "Pemrograman PHP untuk Pemula",
"kategori" => "Programming",
"pengarang" => "Budi Raharjo",
"penerbit" => "Informatika",
"tahun" => 2023,
"isbn" => "978-602-1234-56-7",
"harga" => 75000,
"stok" => 10,
"bahasa" => "Indonesia"
];
?>
<!-- Array Associative -->
<div class="card mb-4">
<div class="card-header bg-success text-white">
<h5 class="mb-0">2. Array Associative - Data Buku Lengkap</h5>
</div>
<div class="card-body">
<div class="row">
<div class="col-md-6">
<table class="table table-borderless">
<tr>
<th width="150">Kode Buku</th>
<td>: <code><?php echo $buku1["kode"]; ?></code></td>
</tr>
<tr>
<th>Judul</th>
<td>: <?php echo $buku1["judul"]; ?></td>
</tr>
<tr>
<th>Kategori</th>
<td>: <span class="badge bg-primary"><?php echo $buku1["kategori"]; ?></span></td>
</tr>
<tr>
<th>Pengarang</th>
<td>: <?php echo $buku1["pengarang"]; ?></td>
</tr>
<tr>
<th>Penerbit</th>
<td>: <?php echo $buku1["penerbit"]; ?></td>
</tr>
</table>
</div>
<div class="col-md-6">
<table class="table table-borderless">
<tr>
<th width="150">Tahun Terbit</th>
<td>: <?php echo $buku1["tahun"]; ?></td>
</tr>
<tr>
<th>ISBN</th>
<td>: <?php echo $buku1["isbn"]; ?></td>
</tr>
<tr>
<th>Harga</th>
<td>: Rp <?php echo number_format($buku1["harga"], 0, ',', '.'); ?></td>
</tr>
<tr>
<th>Stok</th>
<td>: <?php echo $buku1["stok"]; ?> buku</td>
</tr>
<tr>
<th>Bahasa</th>
<td>: <?php echo $buku1["bahasa"]; ?></td>
</tr>
</table>
</div>
</div>
<hr>
<h6>Informasi Array:</h6>
<ul>
<li>Jumlah properties: <strong><?php echo count($buku1); ?></strong></li>
<li>Keys: <code><?php echo implode(", ", array_keys($buku1)); ?></code></li>
</ul>
</div>
</div>
<?php
// 3. MULTIDIMENSIONAL ARRAY - Multiple buku
$buku_list = [
[
"kode" => "BK-001",
"judul" => "Pemrograman PHP untuk Pemula",
"kategori" => "Programming",
"pengarang" => "Budi Raharjo",
"tahun" => 2023,
"harga" => 75000,
"stok" => 10
],
[
"kode" => "BK-002",
"judul" => "Mastering MySQL Database",
"kategori" => "Database",
"pengarang" => "Andi Nugroho",
"tahun" => 2022,
"harga" => 95000,
"stok" => 5
],
[
"kode" => "BK-003",
"judul" => "Laravel Framework Advanced",
"kategori" => "Programming",
"pengarang" => "Siti Aminah",
"tahun" => 2024,
"harga" => 125000,
"stok" => 8
],
[
"kode" => "BK-004",
"judul" => "Web Design Principles",
"kategori" => "Web Design",
"pengarang" => "Dedi Santoso",
"tahun" => 2023,
"harga" => 85000,
"stok" => 15
],
[
"kode" => "BK-005",
"judul" => "Network Security Fundamentals",
"kategori" => "Networking",
"pengarang" => "Rina Wijaya",
"tahun" => 2023,
"harga" => 110000,
"stok" => 3
]
];
?>
<!-- Multidimensional Array -->
<div class="card mb-4">
<div class="card-header bg-info text-white">
<h5 class="mb-0">3. Multidimensional Array - Daftar Semua Buku</h5>
</div>
<div class="card-body">
<p><strong>Total Buku:</strong> <?php echo count($buku_list); ?> judul</p>
<div class="table-responsive">
<table class="table table-striped table-hover">
<thead class="table-dark">
<tr>
<th>No</th>
<th>Kode</th>
<th>Judul</th>
<th>Kategori</th>
<th>Pengarang</th>
<th>Tahun</th>
<th>Harga</th>
<th>Stok</th>
</tr>
</thead>
<tbody>
<?php $no = 1; ?>
<?php foreach ($buku_list as $buku): ?>
<tr>
<td><?php echo $no++; ?></td>
<td><code><?php echo $buku["kode"]; ?></code></td>
<td><?php echo $buku["judul"]; ?></td>
<td><span class="badge bg-primary"><?php echo $buku["kategori"]; ?></span></td>
<td><?php echo $buku["pengarang"]; ?></td>
<td><?php echo $buku["tahun"]; ?></td>
<td>Rp <?php echo number_format($buku["harga"], 0, ',', '.'); ?></td>
<td><?php echo $buku["stok"]; ?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
</div>
</div>
<!-- Statistik dari Array -->
<div class="card mb-4">
<div class="card-header bg-warning">
<h5 class="mb-0">4. Statistik Data (Menggunakan Loop & Array)</h5>
</div>
<div class="card-body">
<?php
// Hitung statistik
$total_stok = 0;
$total_nilai = 0;
$harga_tertinggi = 0;
$harga_terendah = PHP_INT_MAX;
foreach ($buku_list as $buku) {
$total_stok += $buku["stok"];
$total_nilai += ($buku["harga"] * $buku["stok"]);
if ($buku["harga"] > $harga_tertinggi) {
$harga_tertinggi = $buku["harga"];
$buku_termahal = $buku["judul"];
}
if ($buku["harga"] < $harga_terendah) {
$harga_terendah = $buku["harga"];
$buku_termurah = $buku["judul"];
}
}
$rata_rata_harga = $total_nilai / $total_stok;
?>
<div class="row">
<div class="col-md-6">
<ul class="list-group">
<li class="list-group-item d-flex justify-content-between">
<strong>Total Judul Buku:</strong>
<span class="badge bg-primary"><?php echo count($buku_list); ?></span>
</li>
<li class="list-group-item d-flex justify-content-between">
<strong>Total Stok:</strong>
<span class="badge bg-success"><?php echo $total_stok; ?> buku</span>
</li>
<li class="list-group-item d-flex justify-content-between">
<strong>Total Nilai Inventaris:</strong>
<span class="badge bg-info">Rp <?php echo number_format($total_nilai, 0, ',', '.'); ?></span>
</li>
</ul>
</div>
<div class="col-md-6">
<ul class="list-group">
<li class="list-group-item">
<strong>Buku Termahal:</strong><br />
<small><?php echo $buku_termahal; ?></small><br />
<span class="badge bg-danger">Rp <?php echo number_format($harga_tertinggi, 0, ',', '.'); ?></span>
</li>
<li class="list-group-item">
<strong>Buku Termurah:</strong><br />
<small><?php echo $buku_termurah; ?></small><br />
<span class="badge bg-success">Rp <?php echo number_format($harga_terendah, 0, ',', '.'); ?></span>
</li>
<li class="list-group-item">
<strong>Rata-rata Harga:</strong><br />
<span class="badge bg-secondary">Rp <?php echo number_format($rata_rata_harga, 0, ',', '.'); ?></span>
</li>
</ul>
</div>
</div>
</div>
</div>
<!-- Array Functions -->
<div class="card">
<div class="card-header bg-dark text-white">
<h5 class="mb-0">5. Demonstrasi Array Functions</h5>
</div>
<div class="card-body">
<?php
// Extract judul saja ke array baru
$daftar_judul = [];
foreach ($buku_list as $buku) {
$daftar_judul[] = $buku["judul"];
}
// Sort judul
$judul_sorted = $daftar_judul;
sort($judul_sorted);
// Reverse
$judul_reverse = array_reverse($daftar_judul);
?>
<div class="row">
<div class="col-md-4">
<h6>Urutan Original:</h6>
<ol>
<?php foreach ($daftar_judul as $judul): ?>
<li><small><?php echo $judul; ?></small></li>
<?php endforeach; ?>
</ol>
</div>
<div class="col-md-4">
<h6>Sorted A-Z:</h6>
<ol>
<?php foreach ($judul_sorted as $judul): ?>
<li><small><?php echo $judul; ?></small></li>
<?php endforeach; ?>
</ol>
</div>
<div class="col-md-4">
<h6>Reversed:</h6>
<ol>
<?php foreach ($judul_reverse as $judul): ?>
<li><small><?php echo $judul; ?></small></li>
<?php endforeach; ?>
</ol>
</div>
</div>
<hr>
<h6>Filter & Search:</h6>
<?php
// Cari buku dengan kata kunci
$keyword = "PHP";
$hasil_cari = [];
foreach ($buku_list as $buku) {
if (stripos($buku["judul"], $keyword) !== false) {
$hasil_cari[] = $buku;
}
}
?>
<p>Hasil pencarian buku dengan kata kunci "<strong><?php echo $keyword; ?></strong>":
<span class="badge bg-success"><?php echo count($hasil_cari); ?> buku</span>
</p>
<?php if (count($hasil_cari) > 0): ?>
<ul>
<?php foreach ($hasil_cari as $buku): ?>
<li><?php echo $buku["judul"]; ?> - Rp <?php echo number_format($buku["harga"], 0, ',', '.'); ?></li>
<?php endforeach; ?>
</ul>
<?php endif; ?>
</div>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>Testing:
- Akses:
http://localhost/perpustakaan/array_buku.php - Perhatikan perbedaan array indexed, associative, dan multidimensional
- Lihat bagaimana data diproses dengan loop
- Pahami statistik yang dihitung dari array
3. PRAKTIKUM 2: Function untuk Menampilkan Buku
Tujuan
Membuat function reusable untuk menampilkan data buku.
Langkah-langkah
Buat file function_display.php:
<!DOCTYPE html>
<html lang="id">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Function Display Buku</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.0/font/bootstrap-icons.css">
</head>
<body>
<div class="container mt-5">
<h1 class="mb-4"><i class="bi bi-code-square"></i> Function untuk Display Buku</h1>
<?php
// Data buku
$buku_list = [
[
"kode" => "BK-001",
"judul" => "Pemrograman PHP untuk Pemula",
"kategori" => "Programming",
"pengarang" => "Budi Raharjo",
"penerbit" => "Informatika",
"tahun" => 2023,
"harga" => 75000,
"stok" => 10
],
[
"kode" => "BK-002",
"judul" => "Mastering MySQL Database",
"kategori" => "Database",
"pengarang" => "Andi Nugroho",
"penerbit" => "Graha Ilmu",
"tahun" => 2022,
"harga" => 95000,
"stok" => 5
],
[
"kode" => "BK-003",
"judul" => "Laravel Framework Advanced",
"kategori" => "Programming",
"pengarang" => "Siti Aminah",
"penerbit" => "Informatika",
"tahun" => 2024,
"harga" => 125000,
"stok" => 0
]
];
// ========== FUNCTION DEFINITIONS ==========
// 1. Function untuk format rupiah
function format_rupiah($angka) {
return "Rp " . number_format($angka, 0, ',', '.');
}
// 2. Function untuk badge status stok
function badge_stok($stok) {
if ($stok == 0) {
return '<span class="badge bg-danger">Habis</span>';
} elseif ($stok < 5) {
return '<span class="badge bg-warning">Menipis</span>';
} else {
return '<span class="badge bg-success">Tersedia</span>';
}
}
// 3. Function untuk badge kategori
function badge_kategori($kategori) {
$warna = "secondary";
$icon = "book";
switch ($kategori) {
case "Programming":
$warna = "primary";
$icon = "code-slash";
break;
case "Database":
$warna = "success";
$icon = "database";
break;
case "Web Design":
$warna = "info";
$icon = "palette";
break;
case "Networking":
$warna = "warning";
$icon = "wifi";
break;
}
return "<span class='badge bg-$warna'><i class='bi bi-$icon'></i> $kategori</span>";
}
// 4. Function untuk tampilkan card buku
function tampilkan_card_buku($buku) {
$html = '<div class="card mb-3">';
$html .= '<div class="card-header bg-primary text-white">';
$html .= '<h5 class="mb-0">' . $buku["judul"] . '</h5>';
$html .= '</div>';
$html .= '<div class="card-body">';
$html .= '<div class="row">';
$html .= '<div class="col-md-8">';
$html .= '<table class="table table-borderless table-sm">';
$html .= '<tr><th width="120">Kode</th><td>: <code>' . $buku["kode"] . '</code></td></tr>';
$html .= '<tr><th>Kategori</th><td>: ' . badge_kategori($buku["kategori"]) . '</td></tr>';
$html .= '<tr><th>Pengarang</th><td>: ' . $buku["pengarang"] . '</td></tr>';
$html .= '<tr><th>Penerbit</th><td>: ' . $buku["penerbit"] . '</td></tr>';
$html .= '<tr><th>Tahun</th><td>: ' . $buku["tahun"] . '</td></tr>';
$html .= '<tr><th>Harga</th><td>: ' . format_rupiah($buku["harga"]) . '</td></tr>';
$html .= '<tr><th>Stok</th><td>: ' . $buku["stok"] . ' ' . badge_stok($buku["stok"]) . '</td></tr>';
$html .= '</table>';
$html .= '</div>';
$html .= '<div class="col-md-4 text-end">';
if ($buku["stok"] > 0) {
$html .= '<button class="btn btn-success"><i class="bi bi-cart-plus"></i> Pinjam</button>';
} else {
$html .= '<button class="btn btn-secondary" disabled><i class="bi bi-lock"></i> Habis</button>';
}
$html .= '</div>';
$html .= '</div>';
$html .= '</div>';
$html .= '</div>';
return $html;
}
// 5. Function untuk tampilkan row tabel
function tampilkan_row_tabel($buku, $nomor) {
$html = '<tr>';
$html .= '<td>' . $nomor . '</td>';
$html .= '<td><code>' . $buku["kode"] . '</code></td>';
$html .= '<td>' . $buku["judul"] . '</td>';
$html .= '<td>' . badge_kategori($buku["kategori"]) . '</td>';
$html .= '<td>' . $buku["pengarang"] . '</td>';
$html .= '<td>' . format_rupiah($buku["harga"]) . '</td>';
$html .= '<td class="text-center">' . $buku["stok"] . '</td>';
$html .= '<td>' . badge_stok($buku["stok"]) . '</td>';
$html .= '</tr>';
return $html;
}
// 6. Function untuk hitung total stok
function hitung_total_stok($buku_list) {
$total = 0;
foreach ($buku_list as $buku) {
$total += $buku["stok"];
}
return $total;
}
// 7. Function untuk hitung total nilai
function hitung_total_nilai($buku_list) {
$total = 0;
foreach ($buku_list as $buku) {
$total += ($buku["harga"] * $buku["stok"]);
}
return $total;
}
// 8. Function untuk filter buku berdasarkan kategori
function filter_kategori($buku_list, $kategori) {
$hasil = [];
foreach ($buku_list as $buku) {
if ($buku["kategori"] == $kategori) {
$hasil[] = $buku;
}
}
return $hasil;
}
?>
<!-- Tampilkan dengan Card -->
<div class="card mb-4">
<div class="card-header bg-primary text-white">
<h5 class="mb-0">1. Tampilan Card (Menggunakan Function)</h5>
</div>
<div class="card-body">
<?php foreach ($buku_list as $buku): ?>
<?php echo tampilkan_card_buku($buku); ?>
<?php endforeach; ?>
</div>
</div>
<!-- Tampilkan dengan Tabel -->
<div class="card mb-4">
<div class="card-header bg-success text-white">
<h5 class="mb-0">2. Tampilan Tabel (Menggunakan Function)</h5>
</div>
<div class="card-body">
<table class="table table-striped table-hover">
<thead class="table-dark">
<tr>
<th width="50">No</th>
<th width="100">Kode</th>
<th>Judul</th>
<th width="150">Kategori</th>
<th>Pengarang</th>
<th width="120">Harga</th>
<th width="80">Stok</th>
<th width="100">Status</th>
</tr>
</thead>
<tbody>
<?php
$no = 1;
foreach ($buku_list as $buku):
?>
<?php echo tampilkan_row_tabel($buku, $no++); ?>
<?php endforeach; ?>
</tbody>
</table>
</div>
</div>
<!-- Statistik menggunakan Function -->
<div class="card mb-4">
<div class="card-header bg-info text-white">
<h5 class="mb-0">3. Statistik (Menggunakan Function)</h5>
</div>
<div class="card-body">
<div class="row">
<div class="col-md-4">
<div class="card border-primary">
<div class="card-body text-center">
<h6 class="text-muted">Total Judul</h6>
<h3 class="text-primary"><?php echo count($buku_list); ?></h3>
</div>
</div>
</div>
<div class="col-md-4">
<div class="card border-success">
<div class="card-body text-center">
<h6 class="text-muted">Total Stok</h6>
<h3 class="text-success"><?php echo hitung_total_stok($buku_list); ?></h3>
</div>
</div>
</div>
<div class="col-md-4">
<div class="card border-danger">
<div class="card-body text-center">
<h6 class="text-muted">Total Nilai</h6>
<h3 class="text-danger"><?php echo format_rupiah(hitung_total_nilai($buku_list)); ?></h3>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Filter dengan Function -->
<div class="card">
<div class="card-header bg-warning">
<h5 class="mb-0">4. Filter Kategori (Menggunakan Function)</h5>
</div>
<div class="card-body">
<?php
$buku_programming = filter_kategori($buku_list, "Programming");
$buku_database = filter_kategori($buku_list, "Database");
?>
<h6>Buku Kategori Programming: <span class="badge bg-primary"><?php echo count($buku_programming); ?></span></h6>
<ul>
<?php foreach ($buku_programming as $buku): ?>
<li><?php echo $buku["judul"]; ?> - <?php echo format_rupiah($buku["harga"]); ?></li>
<?php endforeach; ?>
</ul>
<h6>Buku Kategori Database: <span class="badge bg-success"><?php echo count($buku_database); ?></span></h6>
<ul>
<?php foreach ($buku_database as $buku): ?>
<li><?php echo $buku["judul"]; ?> - <?php echo format_rupiah($buku["harga"]); ?></li>
<?php endforeach; ?>
</ul>
</div>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>Testing:
- Akses:
http://localhost/perpustakaan/function_display.php - Perhatikan bagaimana function membuat code lebih modular
- Lihat reusability - function dipanggil berulang kali
- Pahami konsep parameter dan return value
4. PRAKTIKUM 3: Function Cari Buku by ID
Tujuan
Membuat function untuk mencari buku berdasarkan kriteria tertentu.
Langkah-langkah
Buat file function_search.php:
<!DOCTYPE html>
<html lang="id">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Function Search Buku</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.0/font/bootstrap-icons.css">
</head>
<body>
<div class="container mt-5">
<h1 class="mb-4"><i class="bi bi-search"></i> Function Search Buku</h1>
<?php
// Data buku
$buku_list = [
[
"kode" => "BK-001",
"judul" => "Pemrograman PHP untuk Pemula",
"kategori" => "Programming",
"pengarang" => "Budi Raharjo",
"tahun" => 2023,
"harga" => 75000,
"stok" => 10
],
[
"kode" => "BK-002",
"judul" => "Mastering MySQL Database",
"kategori" => "Database",
"pengarang" => "Andi Nugroho",
"tahun" => 2022,
"harga" => 95000,
"stok" => 5
],
[
"kode" => "BK-003",
"judul" => "Laravel Framework Advanced",
"kategori" => "Programming",
"pengarang" => "Siti Aminah",
"tahun" => 2024,
"harga" => 125000,
"stok" => 8
],
[
"kode" => "BK-004",
"judul" => "PHP Web Services",
"kategori" => "Programming",
"pengarang" => "Budi Raharjo",
"tahun" => 2023,
"harga" => 85000,
"stok" => 12
],
[
"kode" => "BK-005",
"judul" => "PostgreSQL Advanced",
"kategori" => "Database",
"pengarang" => "Rina Wijaya",
"tahun" => 2024,
"harga" => 110000,
"stok" => 3
]
];
// ========== SEARCH FUNCTIONS ==========
// 1. Cari buku by kode
function cari_by_kode($buku_list, $kode) {
foreach ($buku_list as $buku) {
if ($buku["kode"] == $kode) {
return $buku; // Return buku jika ketemu
}
}
return null; // Return null jika tidak ketemu
}
// 2. Cari buku by judul (partial match, case insensitive)
function cari_by_judul($buku_list, $keyword) {
$hasil = [];
foreach ($buku_list as $buku) {
if (stripos($buku["judul"], $keyword) !== false) {
$hasil[] = $buku;
}
}
return $hasil;
}
// 3. Cari buku by kategori
function cari_by_kategori($buku_list, $kategori) {
$hasil = [];
foreach ($buku_list as $buku) {
if ($buku["kategori"] == $kategori) {
$hasil[] = $buku;
}
}
return $hasil;
}
// 4. Cari buku by pengarang
function cari_by_pengarang($buku_list, $pengarang) {
$hasil = [];
foreach ($buku_list as $buku) {
if (stripos($buku["pengarang"], $pengarang) !== false) {
$hasil[] = $buku;
}
}
return $hasil;
}
// 5. Cari buku by range harga
function cari_by_range_harga($buku_list, $min, $max) {
$hasil = [];
foreach ($buku_list as $buku) {
if ($buku["harga"] >= $min && $buku["harga"] <= $max) {
$hasil[] = $buku;
}
}
return $hasil;
}
// 6. Cari buku tersedia (stok > 0)
function cari_buku_tersedia($buku_list) {
$hasil = [];
foreach ($buku_list as $buku) {
if ($buku["stok"] > 0) {
$hasil[] = $buku;
}
}
return $hasil;
}
// 7. Cari buku terbaru (tahun terbit)
function cari_buku_terbaru($buku_list, $tahun) {
$hasil = [];
foreach ($buku_list as $buku) {
if ($buku["tahun"] >= $tahun) {
$hasil[] = $buku;
}
}
return $hasil;
}
// Helper function untuk tampilkan hasil
function tampilkan_hasil($hasil, $judul_pencarian) {
if (count($hasil) > 0) {
echo "<div class='alert alert-success'>";
echo "<strong>$judul_pencarian:</strong> Ditemukan " . count($hasil) . " buku";
echo "</div>";
echo "<div class='table-responsive'>";
echo "<table class='table table-bordered table-hover'>";
echo "<thead class='table-dark'>";
echo "<tr>";
echo "<th>No</th>";
echo "<th>Kode</th>";
echo "<th>Judul</th>";
echo "<th>Kategori</th>";
echo "<th>Pengarang</th>";
echo "<th>Tahun</th>";
echo "<th>Harga</th>";
echo "<th>Stok</th>";
echo "</tr>";
echo "</thead>";
echo "<tbody>";
$no = 1;
foreach ($hasil as $buku) {
echo "<tr>";
echo "<td>{$no}</td>";
echo "<td><code>{$buku['kode']}</code></td>";
echo "<td>{$buku['judul']}</td>";
echo "<td><span class='badge bg-primary'>{$buku['kategori']}</span></td>";
echo "<td>{$buku['pengarang']}</td>";
echo "<td>{$buku['tahun']}</td>";
echo "<td>Rp " . number_format($buku['harga'], 0, ',', '.') . "</td>";
echo "<td>{$buku['stok']}</td>";
echo "</tr>";
$no++;
}
echo "</tbody>";
echo "</table>";
echo "</div>";
} else {
echo "<div class='alert alert-warning'>";
echo "<strong>$judul_pencarian:</strong> Tidak ada buku yang ditemukan";
echo "</div>";
}
}
?>
<!-- Pencarian by Kode -->
<div class="card mb-4">
<div class="card-header bg-primary text-white">
<h5 class="mb-0">1. Pencarian by Kode</h5>
</div>
<div class="card-body">
<?php
$kode_cari = "BK-002";
$buku = cari_by_kode($buku_list, $kode_cari);
if ($buku != null) {
echo "<div class='alert alert-success'>";
echo "<strong>Pencarian Kode '$kode_cari':</strong> Buku ditemukan!";
echo "</div>";
echo "<table class='table table-bordered'>";
echo "<tr><th width='150'>Kode</th><td><code>{$buku['kode']}</code></td></tr>";
echo "<tr><th>Judul</th><td>{$buku['judul']}</td></tr>";
echo "<tr><th>Kategori</th><td><span class='badge bg-primary'>{$buku['kategori']}</span></td></tr>";
echo "<tr><th>Pengarang</th><td>{$buku['pengarang']}</td></tr>";
echo "<tr><th>Tahun</th><td>{$buku['tahun']}</td></tr>";
echo "<tr><th>Harga</th><td>Rp " . number_format($buku['harga'], 0, ',', '.') . "</td></tr>";
echo "<tr><th>Stok</th><td>{$buku['stok']} buku</td></tr>";
echo "</table>";
} else {
echo "<div class='alert alert-warning'>";
echo "<strong>Pencarian Kode '$kode_cari':</strong> Buku tidak ditemukan";
echo "</div>";
}
?>
</div>
</div>
<!-- Pencarian by Judul -->
<div class="card mb-4">
<div class="card-header bg-success text-white">
<h5 class="mb-0">2. Pencarian by Judul (Keyword: "PHP")</h5>
</div>
<div class="card-body">
<?php
$keyword = "PHP";
$hasil = cari_by_judul($buku_list, $keyword);
tampilkan_hasil($hasil, "Pencarian Judul dengan keyword '$keyword'");
?>
</div>
</div>
<!-- Pencarian by Kategori -->
<div class="card mb-4">
<div class="card-header bg-info text-white">
<h5 class="mb-0">3. Pencarian by Kategori (Kategori: "Programming")</h5>
</div>
<div class="card-body">
<?php
$kategori = "Programming";
$hasil = cari_by_kategori($buku_list, $kategori);
tampilkan_hasil($hasil, "Pencarian Kategori '$kategori'");
?>
</div>
</div>
<!-- Pencarian by Pengarang -->
<div class="card mb-4">
<div class="card-header bg-warning">
<h5 class="mb-0">4. Pencarian by Pengarang (Pengarang: "Budi")</h5>
</div>
<div class="card-body">
<?php
$pengarang = "Budi";
$hasil = cari_by_pengarang($buku_list, $pengarang);
tampilkan_hasil($hasil, "Pencarian Pengarang dengan keyword '$pengarang'");
?>
</div>
</div>
<!-- Pencarian by Range Harga -->
<div class="card mb-4">
<div class="card-header bg-danger text-white">
<h5 class="mb-0">5. Pencarian by Range Harga (Rp 70.000 - Rp 100.000)</h5>
</div>
<div class="card-body">
<?php
$min = 70000;
$max = 100000;
$hasil = cari_by_range_harga($buku_list, $min, $max);
tampilkan_hasil($hasil, "Pencarian Range Harga Rp " . number_format($min, 0, ',', '.') . " - Rp " . number_format($max, 0, ',', '.'));
?>
</div>
</div>
<!-- Pencarian Buku Tersedia -->
<div class="card mb-4">
<div class="card-header bg-dark text-white">
<h5 class="mb-0">6. Buku yang Tersedia (Stok > 0)</h5>
</div>
<div class="card-body">
<?php
$hasil = cari_buku_tersedia($buku_list);
tampilkan_hasil($hasil, "Buku yang Tersedia");
?>
</div>
</div>
<!-- Pencarian Buku Terbaru -->
<div class="card">
<div class="card-header bg-secondary text-white">
<h5 class="mb-0">7. Buku Terbaru (Tahun âĨ 2024)</h5>
</div>
<div class="card-body">
<?php
$tahun = 2024;
$hasil = cari_buku_terbaru($buku_list, $tahun);
tampilkan_hasil($hasil, "Buku Terbaru (Tahun $tahun ke atas)");
?>
</div>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>Testing:
- Akses:
http://localhost/perpustakaan/function_search.php - Perhatikan berbagai jenis pencarian
- Lihat bagaimana function mengembalikan nilai (return)
- Pahami perbedaan return single item vs array
- Coba ubah parameter pencarian
5. PRAKTIKUM 4: Function Hitung & Modularisasi
Tujuan
Membuat function untuk perhitungan dan memecah code ke multiple file.
Langkah-langkah
a. Buat file functions.php (Library Functions):
<?php
// ========== LIBRARY FUNCTIONS PERPUSTAKAAN ==========
// 1. Format Rupiah
function format_rupiah($angka) {
return "Rp " . number_format($angka, 0, ',', '.');
}
// 2. Hitung Total Stok
function hitung_total_stok($buku_list) {
$total = 0;
foreach ($buku_list as $buku) {
$total += $buku["stok"];
}
return $total;
}
// 3. Hitung Total Nilai Inventaris
function hitung_total_nilai($buku_list) {
$total = 0;
foreach ($buku_list as $buku) {
$total += ($buku["harga"] * $buku["stok"]);
}
return $total;
}
// 4. Hitung Rata-rata Harga
function hitung_rata_rata_harga($buku_list) {
if (count($buku_list) == 0) return 0;
$total_harga = 0;
foreach ($buku_list as $buku) {
$total_harga += $buku["harga"];
}
return $total_harga / count($buku_list);
}
// 5. Cari Buku Termahal
function cari_buku_termahal($buku_list) {
if (count($buku_list) == 0) return null;
$termahal = $buku_list[0];
foreach ($buku_list as $buku) {
if ($buku["harga"] > $termahal["harga"]) {
$termahal = $buku;
}
}
return $termahal;
}
// 6. Cari Buku Termurah
function cari_buku_termurah($buku_list) {
if (count($buku_list) == 0) return null;
$termurah = $buku_list[0];
foreach ($buku_list as $buku) {
if ($buku["harga"] < $termurah["harga"]) {
$termurah = $buku;
}
}
return $termurah;
}
// 7. Hitung Jumlah by Kategori
function hitung_by_kategori($buku_list, $kategori) {
$count = 0;
foreach ($buku_list as $buku) {
if ($buku["kategori"] == $kategori) {
$count++;
}
}
return $count;
}
// 8. Hitung Persentase Stok Tersedia
function hitung_persentase_tersedia($buku_list) {
if (count($buku_list) == 0) return 0;
$tersedia = 0;
foreach ($buku_list as $buku) {
if ($buku["stok"] > 0) {
$tersedia++;
}
}
return ($tersedia / count($buku_list)) * 100;
}
// 9. Filter Buku by Stok Minimum
function filter_stok_minimum($buku_list, $min_stok) {
$hasil = [];
foreach ($buku_list as $buku) {
if ($buku["stok"] >= $min_stok) {
$hasil[] = $buku;
}
}
return $hasil;
}
// 10. Sort Buku by Harga
function sort_by_harga($buku_list, $ascending = true) {
$sorted = $buku_list;
for ($i = 0; $i < count($sorted) - 1; $i++) {
for ($j = 0; $j < count($sorted) - $i - 1; $j++) {
if ($ascending) {
if ($sorted[$j]["harga"] > $sorted[$j + 1]["harga"]) {
$temp = $sorted[$j];
$sorted[$j] = $sorted[$j + 1];
$sorted[$j + 1] = $temp;
}
} else {
if ($sorted[$j]["harga"] < $sorted[$j + 1]["harga"]) {
$temp = $sorted[$j];
$sorted[$j] = $sorted[$j + 1];
$sorted[$j + 1] = $temp;
}
}
}
}
return $sorted;
}
// 11. Generate Laporan Statistik
function generate_laporan($buku_list) {
return [
"total_judul" => count($buku_list),
"total_stok" => hitung_total_stok($buku_list),
"total_nilai" => hitung_total_nilai($buku_list),
"rata_rata_harga" => hitung_rata_rata_harga($buku_list),
"buku_termahal" => cari_buku_termahal($buku_list),
"buku_termurah" => cari_buku_termurah($buku_list),
"persentase_tersedia" => hitung_persentase_tersedia($buku_list)
];
}
// 12. Validasi Data Buku
function validasi_buku($buku) {
$errors = [];
if (empty($buku["judul"])) {
$errors[] = "Judul tidak boleh kosong";
}
if (empty($buku["pengarang"])) {
$errors[] = "Pengarang tidak boleh kosong";
}
if (!isset($buku["harga"]) || $buku["harga"] < 0) {
$errors[] = "Harga tidak valid";
}
if (!isset($buku["stok"]) || $buku["stok"] < 0) {
$errors[] = "Stok tidak valid";
}
return $errors;
}
?>b. Buat file data.php (Data Buku):
<?php
// ========== DATA BUKU PERPUSTAKAAN ==========
$buku_list = [
[
"kode" => "BK-001",
"judul" => "Pemrograman PHP untuk Pemula",
"kategori" => "Programming",
"pengarang" => "Budi Raharjo",
"penerbit" => "Informatika",
"tahun" => 2023,
"harga" => 75000,
"stok" => 10
],
[
"kode" => "BK-002",
"judul" => "Mastering MySQL Database",
"kategori" => "Database",
"pengarang" => "Andi Nugroho",
"penerbit" => "Graha Ilmu",
"tahun" => 2022,
"harga" => 95000,
"stok" => 5
],
[
"kode" => "BK-003",
"judul" => "Laravel Framework Advanced",
"kategori" => "Programming",
"pengarang" => "Siti Aminah",
"penerbit" => "Informatika",
"tahun" => 2024,
"harga" => 125000,
"stok" => 8
],
[
"kode" => "BK-004",
"judul" => "Web Design Principles",
"kategori" => "Web Design",
"pengarang" => "Dedi Santoso",
"penerbit" => "Andi",
"tahun" => 2023,
"harga" => 85000,
"stok" => 15
],
[
"kode" => "BK-005",
"judul" => "Network Security Fundamentals",
"kategori" => "Networking",
"pengarang" => "Rina Wijaya",
"penerbit" => "Erlangga",
"tahun" => 2023,
"harga" => 110000,
"stok" => 3
],
[
"kode" => "BK-006",
"judul" => "PHP Web Services",
"kategori" => "Programming",
"pengarang" => "Budi Raharjo",
"penerbit" => "Informatika",
"tahun" => 2024,
"harga" => 90000,
"stok" => 12
],
[
"kode" => "BK-007",
"judul" => "PostgreSQL Advanced",
"kategori" => "Database",
"pengarang" => "Ahmad Yani",
"penerbit" => "Graha Ilmu",
"tahun" => 2024,
"harga" => 115000,
"stok" => 7
],
[
"kode" => "BK-008",
"judul" => "JavaScript Modern",
"kategori" => "Programming",
"pengarang" => "Siti Aminah",
"penerbit" => "Informatika",
"tahun" => 2023,
"harga" => 80000,
"stok" => 0
]
];
?>c. Buat file function_modular.php (File Utama):
<!DOCTYPE html>
<html lang="id">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Function Modular</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.0/font/bootstrap-icons.css">
</head>
<body>
<div class="container mt-5">
<h1 class="mb-4"><i class="bi bi-puzzle"></i> Modularisasi dengan Include & Require</h1>
<?php
// Include file functions dan data
require_once 'functions.php';
require_once 'data.php';
?>
<div class="alert alert-info">
<i class="bi bi-info-circle"></i> <strong>Info:</strong> Halaman ini menggunakan function dari file <code>functions.php</code> dan data dari file <code>data.php</code>
</div>
<!-- Laporan Statistik -->
<div class="card mb-4">
<div class="card-header bg-primary text-white">
<h5 class="mb-0">Laporan Statistik Perpustakaan</h5>
</div>
<div class="card-body">
<?php
$laporan = generate_laporan($buku_list);
?>
<div class="row">
<div class="col-md-3 mb-3">
<div class="card border-primary">
<div class="card-body text-center">
<h6 class="text-muted">Total Judul</h6>
<h2 class="text-primary"><?php echo $laporan["total_judul"]; ?></h2>
</div>
</div>
</div>
<div class="col-md-3 mb-3">
<div class="card border-success">
<div class="card-body text-center">
<h6 class="text-muted">Total Stok</h6>
<h2 class="text-success"><?php echo $laporan["total_stok"]; ?></h2>
</div>
</div>
</div>
<div class="col-md-3 mb-3">
<div class="card border-info">
<div class="card-body text-center">
<h6 class="text-muted">Total Nilai</h6>
<h3 class="text-info"><?php echo format_rupiah($laporan["total_nilai"]); ?></h3>
</div>
</div>
</div>
<div class="col-md-3 mb-3">
<div class="card border-warning">
<div class="card-body text-center">
<h6 class="text-muted">Rata-rata Harga</h6>
<h3 class="text-warning"><?php echo format_rupiah($laporan["rata_rata_harga"]); ?></h3>
</div>
</div>
</div>
</div>
<div class="row mt-3">
<div class="col-md-6">
<div class="card">
<div class="card-body">
<h6 class="card-title">Buku Termahal</h6>
<p class="mb-1"><strong><?php echo $laporan["buku_termahal"]["judul"]; ?></strong></p>
<p class="mb-0 text-danger">
<strong><?php echo format_rupiah($laporan["buku_termahal"]["harga"]); ?></strong>
</p>
</div>
</div>
</div>
<div class="col-md-6">
<div class="card">
<div class="card-body">
<h6 class="card-title">Buku Termurah</h6>
<p class="mb-1"><strong><?php echo $laporan["buku_termurah"]["judul"]; ?></strong></p>
<p class="mb-0 text-success">
<strong><?php echo format_rupiah($laporan["buku_termurah"]["harga"]); ?></strong>
</p>
</div>
</div>
</div>
</div>
<div class="alert alert-info mt-3 mb-0">
<strong>Persentase Ketersediaan:</strong>
<?php echo number_format($laporan["persentase_tersedia"], 1); ?>% buku tersedia
</div>
</div>
</div>
<!-- Statistik by Kategori -->
<div class="card mb-4">
<div class="card-header bg-success text-white">
<h5 class="mb-0">Statistik by Kategori</h5>
</div>
<div class="card-body">
<div class="row">
<?php
$kategori_list = ["Programming", "Database", "Web Design", "Networking"];
foreach ($kategori_list as $kategori):
$jumlah = hitung_by_kategori($buku_list, $kategori);
?>
<div class="col-md-3 mb-2">
<div class="card">
<div class="card-body text-center">
<h6><?php echo $kategori; ?></h6>
<h3 class="text-primary"><?php echo $jumlah; ?></h3>
<small class="text-muted">judul</small>
</div>
</div>
</div>
<?php endforeach; ?>
</div>
</div>
</div>
<!-- Filter Stok Minimum -->
<div class="card mb-4">
<div class="card-header bg-warning">
<h5 class="mb-0">Buku dengan Stok âĨ 10</h5>
</div>
<div class="card-body">
<?php
$buku_stok_aman = filter_stok_minimum($buku_list, 10);
?>
<p>Ditemukan <strong><?php echo count($buku_stok_aman); ?></strong> buku dengan stok aman</p>
<ul>
<?php foreach ($buku_stok_aman as $buku): ?>
<li>
<?php echo $buku["judul"]; ?> -
<span class="badge bg-success">Stok: <?php echo $buku["stok"]; ?></span>
</li>
<?php endforeach; ?>
</ul>
</div>
</div>
<!-- Sort by Harga -->
<div class="card">
<div class="card-header bg-danger text-white">
<h5 class="mb-0">Buku Terurut by Harga (Termurah - Termahal)</h5>
</div>
<div class="card-body">
<?php
$buku_sorted = sort_by_harga($buku_list, true);
?>
<table class="table table-striped">
<thead>
<tr>
<th>No</th>
<th>Judul</th>
<th>Kategori</th>
<th>Harga</th>
<th>Stok</th>
</tr>
</thead>
<tbody>
<?php
$no = 1;
foreach ($buku_sorted as $buku):
?>
<tr>
<td><?php echo $no++; ?></td>
<td><?php echo $buku["judul"]; ?></td>
<td><span class="badge bg-primary"><?php echo $buku["kategori"]; ?></span></td>
<td><?php echo format_rupiah($buku["harga"]); ?></td>
<td><?php echo $buku["stok"]; ?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>Testing:
- Buat ketiga file di folder perpustakaan
- Akses:
http://localhost/perpustakaan/function_modular.php - Perhatikan bagaimana code terpisah ke multiple file
- Lihat reusability - functions bisa dipakai di file lain
- Pahami konsep modularisasi
6. PRAKTIKUM 5: Library Management Functions (Mini Project)
Tujuan
Mengintegrasikan semua konsep array dan function dalam sistem lengkap.
Langkah-langkah
Buat file library_system.php:
<!DOCTYPE html>
<html lang="id">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Library Management System</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.0/font/bootstrap-icons.css">
</head>
<body>
<?php
// Include functions dan data
require_once 'functions.php';
require_once 'data.php';
?>
<!-- Navbar -->
<nav class="navbar navbar-expand-lg navbar-dark bg-primary">
<div class="container-fluid">
<a class="navbar-brand" href="#">
<i class="bi bi-book"></i> Library Management System
</a>
</div>
</nav>
<div class="container mt-4">
<!-- Header -->
<div class="row mb-4">
<div class="col-md-12">
<h2>Dashboard Perpustakaan</h2>
<p class="text-muted">Sistem manajemen buku menggunakan Array & Function PHP</p>
</div>
</div>
<!-- Quick Stats -->
<?php $laporan = generate_laporan($buku_list); ?>
<div class="row mb-4">
<div class="col-md-3">
<div class="card border-primary">
<div class="card-body text-center">
<i class="bi bi-book text-primary" style="font-size: 2rem;"></i>
<h4 class="mt-2"><?php echo $laporan["total_judul"]; ?></h4>
<p class="text-muted mb-0">Total Judul</p>
</div>
</div>
</div>
<div class="col-md-3">
<div class="card border-success">
<div class="card-body text-center">
<i class="bi bi-stack text-success" style="font-size: 2rem;"></i>
<h4 class="mt-2"><?php echo $laporan["total_stok"]; ?></h4>
<p class="text-muted mb-0">Total Stok</p>
</div>
</div>
</div>
<div class="col-md-3">
<div class="card border-info">
<div class="card-body text-center">
<i class="bi bi-cash text-info" style="font-size: 2rem;"></i>
<h5 class="mt-2"><?php echo format_rupiah($laporan["total_nilai"]); ?></h5>
<p class="text-muted mb-0">Total Nilai</p>
</div>
</div>
</div>
<div class="col-md-3">
<div class="card border-warning">
<div class="card-body text-center">
<i class="bi bi-percent text-warning" style="font-size: 2rem;"></i>
<h4 class="mt-2"><?php echo number_format($laporan["persentase_tersedia"], 1); ?>%</h4>
<p class="text-muted mb-0">Tersedia</p>
</div>
</div>
</div>
</div>
<!-- Daftar Buku -->
<div class="card mb-4">
<div class="card-header bg-primary text-white">
<h5 class="mb-0"><i class="bi bi-table"></i> Daftar Buku Perpustakaan</h5>
</div>
<div class="card-body">
<div class="table-responsive">
<table class="table table-hover">
<thead class="table-light">
<tr>
<th>No</th>
<th>Kode</th>
<th>Judul</th>
<th>Kategori</th>
<th>Pengarang</th>
<th>Tahun</th>
<th>Harga</th>
<th>Stok</th>
<th>Status</th>
</tr>
</thead>
<tbody>
<?php
$no = 1;
foreach ($buku_list as $buku):
// Status badge
if ($buku["stok"] == 0) {
$status = '<span class="badge bg-danger">Habis</span>';
} elseif ($buku["stok"] < 5) {
$status = '<span class="badge bg-warning">Menipis</span>';
} else {
$status = '<span class="badge bg-success">Tersedia</span>';
}
?>
<tr>
<td><?php echo $no++; ?></td>
<td><code><?php echo $buku["kode"]; ?></code></td>
<td><?php echo $buku["judul"]; ?></td>
<td><span class="badge bg-primary"><?php echo $buku["kategori"]; ?></span></td>
<td><?php echo $buku["pengarang"]; ?></td>
<td><?php echo $buku["tahun"]; ?></td>
<td><?php echo format_rupiah($buku["harga"]); ?></td>
<td class="text-center"><?php echo $buku["stok"]; ?></td>
<td><?php echo $status; ?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
</div>
</div>
<!-- Analysis Section -->
<div class="row">
<!-- Top 3 Termahal -->
<div class="col-md-6 mb-4">
<div class="card">
<div class="card-header bg-danger text-white">
<h6 class="mb-0"><i class="bi bi-graph-up-arrow"></i> Top 3 Buku Termahal</h6>
</div>
<div class="card-body">
<?php
$sorted_desc = sort_by_harga($buku_list, false);
$top3 = array_slice($sorted_desc, 0, 3);
?>
<ol>
<?php foreach ($top3 as $buku): ?>
<li>
<strong><?php echo $buku["judul"]; ?></strong><br />
<small class="text-muted"><?php echo $buku["pengarang"]; ?></small><br />
<span class="badge bg-danger"><?php echo format_rupiah($buku["harga"]); ?></span>
</li>
<?php endforeach; ?>
</ol>
</div>
</div>
</div>
<!-- Buku Perlu Restocking -->
<div class="col-md-6 mb-4">
<div class="card">
<div class="card-header bg-warning">
<h6 class="mb-0"><i class="bi bi-exclamation-triangle"></i> Perlu Restocking (Stok < 5)</h6>
</div>
<div class="card-body">
<?php
$perlu_restock = [];
foreach ($buku_list as $buku) {
if ($buku["stok"] < 5) {
$perlu_restock[] = $buku;
}
}
?>
<?php if (count($perlu_restock) > 0): ?>
<ul class="list-group">
<?php foreach ($perlu_restock as $buku): ?>
<li class="list-group-item d-flex justify-content-between align-items-center">
<div>
<strong><?php echo $buku["judul"]; ?></strong><br />
<small class="text-muted"><?php echo $buku["kode"]; ?></small>
</div>
<span class="badge bg-warning">Stok: <?php echo $buku["stok"]; ?></span>
</li>
<?php endforeach; ?>
</ul>
<?php else: ?>
<div class="alert alert-success mb-0">
<i class="bi bi-check-circle"></i> Semua buku stok aman
</div>
<?php endif; ?>
</div>
</div>
</div>
</div>
<!-- Category Distribution -->
<div class="card">
<div class="card-header bg-info text-white">
<h5 class="mb-0"><i class="bi bi-pie-chart"></i> Distribusi Kategori Buku</h5>
</div>
<div class="card-body">
<div class="row">
<?php
$kategori_list = ["Programming", "Database", "Web Design", "Networking"];
foreach ($kategori_list as $kategori):
$jumlah = hitung_by_kategori($buku_list, $kategori);
$persentase = ($jumlah / count($buku_list)) * 100;
?>
<div class="col-md-3 mb-3">
<div class="card">
<div class="card-body">
<h6 class="card-title"><?php echo $kategori; ?></h6>
<h3 class="text-primary"><?php echo $jumlah; ?></h3>
<div class="progress">
<div class="progress-bar" role="progressbar"
style="width: <?php echo $persentase; ?>%"
aria-valuenow="<?php echo $persentase; ?>"
aria-valuemin="0" aria-valuemax="100">
<?php echo number_format($persentase, 1); ?>%
</div>
</div>
</div>
</div>
</div>
<?php endforeach; ?>
</div>
</div>
</div>
</div>
<footer class="bg-dark text-white text-center py-3 mt-5">
<p class="mb-0">© 2024 Library Management System - Powered by PHP Array & Functions</p>
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>Testing:
- Pastikan file
functions.phpdandata.phpsudah dibuat - Akses:
http://localhost/perpustakaan/library_system.php - Perhatikan integrasi lengkap array dan function
- Lihat bagaimana modularisasi membuat code lebih terorganisir
- Pahami flow data dari include file ke tampilan
E. TUGAS
Tugas 1: Array Anggota Perpustakaan (40%)
Instruksi:
Buat file array_anggota.php yang mengelola data anggota perpustakaan menggunakan multidimensional array.
Spesifikasi:
- Buat array anggota dengan minimal 5 data:
$anggota_list = [
[
"id" => "AGT-001",
"nama" => "Budi Santoso",
"email" => "budi@email.com",
"telepon" => "081234567890",
"alamat" => "Jakarta",
"tanggal_daftar" => "2024-01-15",
"status" => "Aktif",
"total_pinjaman" => 5
],
// ... tambah 4 anggota lagi
];-
Fitur yang harus dibuat:
- Tampilkan semua anggota dalam tabel
- Hitung total anggota
- Hitung anggota aktif vs non-aktif
- Cari anggota dengan total pinjaman terbanyak
- Filter anggota berdasarkan status
- Tampilkan statistik dalam cards Bootstrap
-
Statistik yang harus ditampilkan:
- Total anggota
- Anggota aktif (%)
- Anggota non-aktif (%)
- Rata-rata pinjaman per anggota
- Anggota teraktif (paling banyak pinjam)
Tugas 2: Function Library untuk Anggota (60%)
Instruksi:
Buat 2 file: functions_anggota.php dan sistem_anggota.php yang mengimplementasikan library functions untuk mengelola anggota.
File 1: functions_anggota.php
Buat minimal 8 functions berikut:
<?php
// 1. Function untuk hitung total anggota
function hitung_total_anggota($anggota_list) {
// TODO: return count
}
// 2. Function untuk hitung anggota aktif
function hitung_anggota_aktif($anggota_list) {
// TODO: hitung yang status = "Aktif"
}
// 3. Function untuk hitung rata-rata pinjaman
function hitung_rata_rata_pinjaman($anggota_list) {
// TODO: hitung average total_pinjaman
}
// 4. Function untuk cari anggota by ID
function cari_anggota_by_id($anggota_list, $id) {
// TODO: return anggota atau null
}
// 5. Function untuk cari anggota teraktif
function cari_anggota_teraktif($anggota_list) {
// TODO: return anggota dengan total_pinjaman tertinggi
}
// 6. Function untuk filter by status
function filter_by_status($anggota_list, $status) {
// TODO: return array anggota dengan status tertentu
}
// 7. Function untuk validasi email
function validasi_email($email) {
// TODO: return true/false
// Cek: tidak kosong, ada @, ada .
}
// 8. Function untuk format tanggal Indonesia
function format_tanggal_indo($tanggal) {
// TODO: ubah 2024-01-15 jadi 15 Januari 2024
}
?>File 2: sistem_anggota.php
Buat halaman yang:
- Include
functions_anggota.php - Tampilkan dashboard anggota dengan statistik
- Tampilkan tabel semua anggota
- Tampilkan anggota teraktif dalam card khusus
- Tampilkan daftar anggota aktif dan non-aktif terpisah
- Gunakan Bootstrap untuk styling
Bonus (+10%):
- Tambah function untuk sort anggota by nama (A-Z)
- Tambah function untuk search anggota by nama (partial match)
- Implementasikan kedua function di halaman
Template Starter sistem_anggota.php:
<!DOCTYPE html>
<html lang="id">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Sistem Anggota Perpustakaan</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.0/font/bootstrap-icons.css">
</head>
<body>
<?php
// Include functions
require_once 'functions_anggota.php';
// Data anggota
$anggota_list = [
// TODO: Isi data anggota minimal 5
];
?>
<div class="container mt-5">
<h1 class="mb-4"><i class="bi bi-people"></i> Sistem Anggota Perpustakaan</h1>
<!-- Dashboard Statistik -->
<div class="row mb-4">
<!-- TODO: Cards statistik -->
</div>
<!-- Tabel Anggota -->
<div class="card mb-4">
<div class="card-header bg-primary text-white">
<h5 class="mb-0">Daftar Anggota</h5>
</div>
<div class="card-body">
<!-- TODO: Tabel anggota -->
</div>
</div>
<!-- Anggota Teraktif -->
<div class="card">
<div class="card-header bg-success text-white">
<h5 class="mb-0">Anggota Teraktif</h5>
</div>
<div class="card-body">
<!-- TODO: Info anggota teraktif -->
</div>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>Submission:
- Format: Link repository GitHub
- Deadline: Pertemuan 5
- Upload ke: Ngaji UIN Gusdur (submit link repository GitHub)
F. EVALUASI
1. Kuis Singkat (Dikerjakan di Kelas)
Soal Pilihan Ganda:
-
Cara mendeklarasikan array di PHP adalah:
- A. $arr = array(1, 2, 3);
- B. $arr = [1, 2, 3];
- C. Both A and B
- D. $arr = 3;
-
Untuk mengakses elemen pertama array indexed:
- A. $arr[1]
- B. $arr[0]
- C. $arr.first()
- D. $arr->first
-
Array associative menggunakan:
- A. Index angka
- B. Key string
- C. Both
- D. Object
-
Function untuk menghitung jumlah elemen array:
- A. length()
- B. size()
- C. count()
- D. total()
-
Untuk return nilai dari function gunakan:
- A. return
- B. echo
- C. print
- D. output
-
Scope variabel di dalam function adalah:
- A. Global
- B. Local
- C. Static
- D. Public
-
Untuk menginclude file PHP gunakan:
- A. include atau require
- B. import
- C. using
- D. load
-
Perbedaan include dan require:
- A. Tidak ada
- B. require fatal error jika file tidak ada
- C. include lebih cepat
- D. require hanya untuk function
-
Foreach digunakan untuk:
- A. Looping angka
- B. Looping array
- C. Conditional
- D. Function
-
Cara mengakses array multidimensi:
- A. $arr[0][0]
- B. $arr[0]->0
- C. $arr.0.0
- D. $arr->0->0
Soal Essay:
-
Jelaskan perbedaan array indexed dan array associative! Berikan contoh masing-masing! (10 poin)
Jawaban tersedia di dokumen kunci jawaban dosen.
-
Buatlah function untuk menghitung total harga dari array buku berikut! (15 poin)
$buku_list = [ ["judul" => "PHP", "harga" => 75000, "jumlah" => 2], ["judul" => "MySQL", "harga" => 95000, "jumlah" => 1] ];Jawaban tersedia di dokumen kunci jawaban dosen.
-
Apa perbedaan include dan require? Kapan menggunakan masing-masing? (10 poin)
Jawaban tersedia di dokumen kunci jawaban dosen.
-
Buatlah function untuk mencari buku termahal dari array! (15 poin)
Jawaban tersedia di dokumen kunci jawaban dosen.
-
Jelaskan konsep scope variabel dalam PHP! Berikan contoh local dan global scope! (10 poin)
Jawaban tersedia di dokumen kunci jawaban dosen.
2. Checklist Kompetensi
Self-Assessment:
| No | Kompetensi | Belum | Cukup | Mahir |
|---|---|---|---|---|
| 1 | Membuat array indexed | â | â | â |
| 2 | Membuat array associative | â | â | â |
| 3 | Membuat multidimensional array | â | â | â |
| 4 | Mengakses elemen array | â | â | â |
| 5 | Menggunakan foreach loop | â | â | â |
| 6 | Membuat function sederhana | â | â | â |
| 7 | Function dengan parameter | â | â | â |
| 8 | Function dengan return value | â | â | â |
| 9 | Memahami scope variabel | â | â | â |
| 10 | Menggunakan include/require | â | â | â |
| 11 | Modularisasi code | â | â | â |
| 12 | Array functions (count, in_array, dll) | â | â | â |
Target: Minimal "Cukup" untuk semua poin sebelum lanjut ke pertemuan 5.
G. REFERENSI
1. Dokumentasi Resmi
- PHP Arrays: https://www.php.net/manual/en/language.types.array.php (opens in a new tab)
- PHP Functions: https://www.php.net/manual/en/language.functions.php (opens in a new tab)
- Array Functions: https://www.php.net/manual/en/ref.array.php (opens in a new tab)
- Include/Require: https://www.php.net/manual/en/function.include.php (opens in a new tab)
2. Tutorial Online
- W3Schools PHP Arrays: https://www.w3schools.com/php/php_arrays.asp (opens in a new tab)
- W3Schools PHP Functions: https://www.w3schools.com/php/php_functions.asp (opens in a new tab)
- PHP Array Tutorial: https://www.tutorialspoint.com/php/php_arrays.htm (opens in a new tab)
- PHP Functions Tutorial: https://www.tutorialspoint.com/php/php_functions.htm (opens in a new tab)
3. Video Tutorial (Rekomendasi)
- PHP Arrays Explained - TraversyMedia (YouTube)
- PHP Functions Tutorial - freeCodeCamp (YouTube)
- Belajar PHP Array - Web Programming UNPAS (YouTube)
- PHP Functions Deep Dive - The Net Ninja (YouTube)
4. Buku Referensi
- "Learning PHP, MySQL & JavaScript" - Robin Nixon (Chapter: Arrays & Functions)
- "PHP & MySQL: Novice to Ninja" - Tom Butler & Kevin Yank (Chapter: Arrays)
- "Modern PHP" - Josh Lockhart (Chapter: Functions & Closures)
H. CATATAN PENTING
Untuk Mahasiswa:
1. Best Practices Array
â DO:
// Gunakan [] untuk PHP modern (5.4+)
$buku = ["PHP", "MySQL"];
// Gunakan key yang descriptive
$buku = [
"judul" => "PHP Programming",
"harga" => 75000
];
// Cek array kosong sebelum proses
if (count($array) > 0) {
// Process
}
// Gunakan in_array untuk cek keberadaan
if (in_array("PHP", $judul_list)) {
// Found
}â DON'T:
// Jangan gunakan array() jika bisa []
$buku = array("PHP", "MySQL"); // Old style
// Jangan key yang tidak jelas
$b = ["j" => "PHP"]; // Unclear
// Jangan akses tanpa cek
echo $array[10]; // Bisa undefined index
// Jangan loop tanpa cek empty
foreach ($array as $item) { // Jika $array belum di-set, error
//...
}2. Best Practices Function
â DO:
// Function name descriptive
function hitung_total_harga($items) {
// Clear purpose
}
// Gunakan type hint (PHP 7+)
function tambah(int $a, int $b): int {
return $a + $b;
}
// Return early untuk validasi
function bagi($a, $b) {
if ($b == 0) {
return null; // Early return
}
return $a / $b;
}
// One function, one purpose
function hitung_total($items) {
// Hanya hitung, tidak print
return $total;
}â DON'T:
// Jangan nama tidak jelas
function proses($data) { // Proses apa?
//...
}
// Jangan function terlalu panjang
function do_everything() {
// 200 lines of code... BAD!
}
// Jangan mix logic dan presentation
function hitung_dan_tampilkan() {
$total = ...;
echo $total; // BAD: mixing concerns
return $total;
}3. Common Mistakes
â Error 1: Undefined Index
// SALAH
$buku = ["judul" => "PHP"];
echo $buku["harga"]; // Undefined index: harga
// BENAR
if (isset($buku["harga"])) {
echo $buku["harga"];
}â Error 2: Function tidak return
// SALAH
function hitung_total($items) {
$total = 100;
// Lupa return!
}
$hasil = hitung_total($items); // $hasil = null
// BENAR
function hitung_total($items) {
$total = 100;
return $total; // Return value
}â Error 3: Scope Issue
// SALAH
$total = 0;
function tambah() {
$total += 10; // Local variabel, bukan global
}
// BENAR
$total = 0;
function tambah() {
global $total; // Akses global
$total += 10;
}
// LEBIH BAIK: Gunakan parameter & return
function tambah($total) {
return $total + 10;
}
$total = tambah($total);4. Debugging Tips
// 1. Debug array
print_r($array); // Lihat struktur
var_dump($array); // Lihat struktur + tipe
// 2. Debug function
function test() {
echo "Function dipanggil<br />"; // Trace
// ...
echo "Sebelum return<br />";
return $value;
}
// 3. Cek nilai return
$result = function_name();
var_dump($result); // Lihat apa yang di-return
// 4. Cek array kosong
if (empty($array)) {
echo "Array kosong!";
}I. PERSIAPAN PERTEMUAN 5
Topik Pertemuan 5: Form Handling dengan PHP
Preview Materi:
- Form HTML basics
- Method GET vs POST
- Superglobal variables ($_GET, $_POST)
- Validasi input
- Sanitasi data
- Form security basics
Yang Perlu Disiapkan:
- Pahami array associative (data dari form berbentuk array assoc)
- Kuasai function (untuk validasi dan proses form)
- Review konsep percabangan (untuk validasi)
- Siapkan data buku dalam array (akan digunakan untuk form)
Pre-reading:
- PHP Forms: https://www.php.net/manual/en/tutorial.forms.php (opens in a new tab)
- PHP Superglobals: https://www.php.net/manual/en/language.variables.superglobals.php (opens in a new tab)
Selamat Belajar! đđ
End of Module - Pertemuan 4
Next: Pertemuan 5 - Form Handling dengan PHP