CASE STUDY — Chapter 7: PHP Array Object

Answer Key | ចម្លើយគន្លឹះ ជាមួយ Code និង Output

ផ្នែកទ្រឹស្តី (Theory Q1–Q5) + ផ្នែកអនុវត្ត (Practical 1–3)

PHP 8+ Tailwind CSS foreach Loop Associative & Multidimensional Array

I. សំនួរទ្រឹស្តី (Theory Questions)

Q1. តើ Array ជាអ្វី? ប្រើសម្រាប់ធ្វើអ្វី? ចូរបង្កើតឧទាហរណ៍អំពី Array ប្រើក្នុងលក្ខណៈតារាង

Array ជា data structure (ទម្រង់ទិន្នន័យ) ពិសេសមួយ ដែលអាចផ្ទុកតម្លៃច្រើនក្នុង variable តែមួយ។ គេប្រើ Array សម្រាប់រក្សាទុក និង ចាត់ចែងទិន្នន័យជាក្រុម ដូចជា បញ្ជីឈ្មោះនិស្សិត បញ្ជីពិន្ទុ ឬ បញ្ជីផលិតផល។ Array អាចបង្ហាញជាទម្រង់តារាង (table) បានយ៉ាងងាយស្រួល។

<?php
// Array ជា variable ផ្ទុកតម្លៃច្រើន
$fruits = ["Apple", "Banana", "Orange"];
echo $fruits[0]; // Apple
echo $fruits[1]; // Banana

// បង្ហាញជា Table ដោយប្រើ foreach
echo "<table border='1'>";
echo "<tr><th>#</th><th>Fruit</th></tr>";
foreach ($fruits as $i => $fruit) {
    echo "<tr><td>" . ($i + 1) . "</td><td>$fruit</td></tr>";
}
echo "</table>";
?>
Q2. តើ Array មានប៉ុន្មានប្រភេទ? អ្វីខ្លះ? ចូរបង្កើតឧទាហរណ៍អំពីប្រភេទ Array នីមួយៗ

Array មាន ៣ ប្រភេទ:
១) Indexed (Numeric) Array — key ជាលេខ (0, 1, 2...)
២) Associative Array — key ជា string (ត្រូវកំណត់ក្នុង =>)
៣) Multidimensional Array — Array ដែលមាន Array ទៀតនៅខាងក្នុង

<?php
// 1) Indexed (Numeric) Array — key ជាលេខ
$colors = ["Red", "Green", "Blue"];
echo $colors[0]; // Red

// 2) Associative Array — key ជា string
$student = [
    "name"  => "Sokha",
    "age"   => 20,
    "major" => "IT"
];
echo $student["name"]; // Sokha

// 3) Multidimensional Array — Array ក្នុង Array
$matrix = [
    [1, 2, 3],
    [4, 5, 6]
];
echo $matrix[1][2]; // 6
?>
Q3. ប្រៀបធៀប Array Variable ដោយនឹង Scalar Variable និងលើកឧទាហរណ៍បញ្ជាក់

Scalar Variable ផ្ទុកតម្លៃតែ ១ (ឧ. $name = "Sokha")។ រីឯ Array Variable អាចផ្ទុកតម្លៃច្រើនក្នុង variable មួយ (ឧ. $names = ["Sokha", "Dara", "Vanna"])។

Feature Scalar Variable Array Variable
ចំនួនតម្លៃ១ តម្លៃច្រើនតម្លៃ
ឧទាហរណ៍$name = "Sokha"$names = ["Sokha","Dara"]
ការ Access$name$names[0], $names[1]
<?php
// Scalar Variable — ផ្ទុកតម្លៃតែ 1
$name = "Sokha";
$age  = 20;

// Array Variable — ផ្ទុកតម្លៃច្រើនក្នុង variable មួយ
$names = ["Sokha", "Dara", "Vanna"];
$ages  = [20, 21, 22];

echo $name;     // Sokha (scalar: តម្លៃ 1)
echo $names[0]; // Sokha (array: index 0)
echo $names[1]; // Dara  (array: index 1)
?>
Q4. ពន្យល់អំពី Multidimensional Array? តើគេអាច Access បានយ៉ាងណា? ចូរបង្កើតឧទាហរណ៍បញ្ជាក់

Multidimensional Array ជា Array ដែលមាន Array ផ្សេងទៀតនៅខាងក្នុង។ គេអាច Access ទិន្នន័យដោយប្រើ index/key ច្រើន ដូចជា $arr[0]["name"]។ ត្រូវប្រើ nested foreach (foreach ក្នុង foreach) ឬ direct access ដោយ [$row][$col]

<?php
// Multidimensional Array — Array ដែលមាន Array នៅខាងក្នុង
$students = [
    ["name" => "Sokha", "score" => 85],
    ["name" => "Dara",  "score" => 90],
    ["name" => "Vanna", "score" => 78]
];

// Access ដោយ [$row]["key"]
echo $students[0]["name"];  // Sokha
echo $students[1]["score"]; // 90

// forEach ដើម្បី Loop ទិន្នន័យ
foreach ($students as $s) {
    echo $s["name"] . " => " . $s["score"] . "<br>";
}
?>
Q5. ប្រៀបធៀបអំពីលក្ខណៈខុសគ្នារវាង Numeric Array និង Associative Array
Feature Numeric Array Associative Array
Key TypeInteger (0, 1, 2...)String ("name", "age"...)
ការ Access$arr[0], $arr[1]$arr["key"]
ប្រើសម្រាប់ទិន្នន័យដែលមានលំដាប់ទិន្នន័យជា key-value pair
ឧទាហរណ៍["A", "B", "C"]["name"=>"Sokha", "age"=>20]
key ស្វ័យប្រវត្តិPHP កំណត់ key ដោយស្វ័យប្រវត្តិអ្នកសរសេរកំណត់ key ដោយខ្លួនឯង
<?php
// Numeric Array — key = 0, 1, 2 ...
$fruits = ["Apple", "Banana", "Orange"];
echo $fruits[0]; // Apple (access ដោយ index លេខ)

// Associative Array — key = string
$person = [
    "name" => "Sokha",
    "age"  => 20,
    "city" => "Phnom Penh"
];
echo $person["name"]; // Sokha (access ដោយ key string)

// Numeric:     $arr[0], $arr[1]     — index ជាលេខ
// Associative: $arr["key"]          — key ជាឈ្មោះ (string)
?>

II-1. Book Information (Associative Array + foreach)

Concept — អ្វីដែលយើងដោះស្រាយ

បង្កើត Associative Array ដើម្បីផ្ទុកទិន្នន័យសៀវភៅ ដែលមាន columns: BookID, Title, Author, Price, Year។ បន្ទាប់មកប្រើ foreach ដើម្បី loop រាល់សៀវភៅ ហើយបង្ហាញជាតារាង (table)។

Code — PHP Script
<?php
// Practical 1: Book Information — Associative Array + foreach
$books = [
    ["BookID"=>"B001", "Title"=>"HTML & CSS",      "Author"=>"Jon Duckett",     "Price"=>15.00, "Year"=>2020],
    ["BookID"=>"B002", "Title"=>"PHP & MySQL",      "Author"=>"Luke Welling",    "Price"=>20.00, "Year"=>2021],
    ["BookID"=>"B003", "Title"=>"JavaScript",       "Author"=>"David Flanagan",  "Price"=>18.50, "Year"=>2019],
    ["BookID"=>"B004", "Title"=>"Python Basics",    "Author"=>"Al Sweigart",     "Price"=>12.00, "Year"=>2022],
    ["BookID"=>"B005", "Title"=>"Java Programming", "Author"=>"Herbert Schildt", "Price"=>25.00, "Year"=>2023],
];

echo "<table border='1'>";
echo "<tr><th>#</th><th>BookID</th><th>Title</th><th>Author</th><th>Price ($)</th><th>Year</th></tr>";

$no = 1;
foreach ($books as $book) {
    echo "<tr>";
    echo "<td>$no</td>";
    echo "<td>{$book['BookID']}</td>";
    echo "<td>{$book['Title']}</td>";
    echo "<td>{$book['Author']}</td>";
    echo "<td>" . number_format($book['Price'], 2) . "</td>";
    echo "<td>{$book['Year']}</td>";
    echo "</tr>";
    $no++;
}
echo "</table>";
?>
Output — លទ្ធផល
# BookID Title Author Price ($) Year
1 B001 HTML & CSS Jon Duckett 15.00 2020
2 B002 PHP & MySQL Luke Welling 20.00 2021
3 B003 JavaScript David Flanagan 18.50 2019
4 B004 Python Basics Al Sweigart 12.00 2022
5 B005 Java Programming Herbert Schildt 25.00 2023

Practice Note

  • រៀនបង្កើត Associative Array ដែលមាន key ជា string (ដូចជា "BookID", "Title", "Author")
  • រៀនប្រើ foreach ($array as $item) ដើម្បី loop រាល់ element
  • រៀនបង្ហាញទិន្នន័យជាទម្រង់ HTML table ដែលមាន header row និង data rows

II-2. Subject / Score Info (Numeric Array → Total / Average / Grade)

Concept — អ្វីដែលយើងដោះស្រាយ

បង្កើត Numeric Array ដើម្បីផ្ទុកពិន្ទុ (scores)។ ប្រើ foreach ដើម្បី loop រាល់ score ហើយបង្ហាញជាតារាង រួមទាំងគណនា Total, Average (format 2 decimals), និង Grade

Grade Conditions: A (≥95) | B (90–94.99) | C (80–89.99) | D (70–79.99) | E (60–69.99) | F (<60)
Code — PHP Script
<?php
// Practical 2: Subject/Score — Numeric Array + foreach
$subjects = ["PHP", "HTML", "CSS", "JavaScript", "MySQL", "C++"];
$scores   = [90, 100, 89, 98, 90, 95];

// Grade function
function getGrade($avg) {
    if ($avg >= 95) return "A";   // >= 95
    if ($avg >= 90) return "B";   // 90 – 94.99
    if ($avg >= 80) return "C";   // 80 – 89.99
    if ($avg >= 70) return "D";   // 70 – 79.99
    if ($avg >= 60) return "E";   // 60 – 69.99
    return "F";                   // < 60
}

// គណនា Total, Average, Grade
$total   = array_sum($scores);
$average = $total / count($scores);
$grade   = getGrade($average);

// បង្ហាញជា Table
echo "<table border='1'>";
echo "<tr><th>#</th><th>Subject</th><th>Score</th></tr>";
foreach ($scores as $i => $score) {
    $no = $i + 1;
    echo "<tr><td>$no</td><td>{$subjects[$i]}</td><td>$score</td></tr>";
}
echo "</table>";

echo "<p>Total   = $total</p>";
echo "<p>Average = " . number_format($average, 2) . "</p>";
echo "<p>Grade   = $grade</p>";
?>
Output — លទ្ធផល
# Subject Score
1 PHP 90
2 HTML 100
3 CSS 89
4 JavaScript 98
5 MySQL 90
6 C++ 95

Total

562

Average

93.67

Grade

Grade B

Practice Note

  • រៀនប្រើ array_sum() សម្រាប់គណនាផលបូក និង count() សម្រាប់ចំនួន elements
  • រៀនសរសេរ function ជាមួយ if/elseif ដើម្បីកំណត់ Grade ផ្អែកលើ Average
  • រៀនប្រើ number_format($value, 2) ដើម្បី format ទសភាគ ២ ខ្ទង់

II-3. Subject and Score Information — Multi-Students (Multidimensional Array)

Concept — អ្វីដែលយើងដោះស្រាយ

បង្កើត Multidimensional Array ដើម្បីផ្ទុកទិន្នន័យនិស្សិតច្រើននាក់ (Name + C++ Test/Final + C# Test/Final + PHP Test/Final + DBMS Test/Final)។ ប្រើ nested foreach ដើម្បី loop រាល់និស្សិត និង subjects ហើយគណនា Total Score របស់និស្សិតនីមួយៗ។

Test: 50 ពិន្ទុ | Final: 50 ពិន្ទុ | Subject: 100 ពិន្ទុ | 4 Subjects: 400 ពិន្ទុ

Code — PHP Script
<?php
// Practical 3: Multi-Students — Multidimensional Array + nested foreach
$students = [
    ["name"=>"Sophal",  "subjects"=>["C++"=>["test"=>40,"final"=>35], "C#"=>["test"=>38,"final"=>37],
                                     "PHP"=>["test"=>35,"final"=>40], "DBMS"=>["test"=>33,"final"=>32]]],
    ["name"=>"Samnang", "subjects"=>["C++"=>["test"=>35,"final"=>30], "C#"=>["test"=>40,"final"=>35],
                                     "PHP"=>["test"=>30,"final"=>35], "DBMS"=>["test"=>28,"final"=>32]]],
    ["name"=>"Chhun",   "subjects"=>["C++"=>["test"=>35,"final"=>35], "C#"=>["test"=>40,"final"=>30],
                                     "PHP"=>["test"=>35,"final"=>30], "DBMS"=>["test"=>30,"final"=>35]]],
    ["name"=>"Pheak",   "subjects"=>["C++"=>["test"=>30,"final"=>30], "C#"=>["test"=>35,"final"=>30],
                                     "PHP"=>["test"=>30,"final"=>35], "DBMS"=>["test"=>28,"final"=>32]]],
    ["name"=>"Davin",   "subjects"=>["C++"=>["test"=>38,"final"=>37], "C#"=>["test"=>30,"final"=>35],
                                     "PHP"=>["test"=>35,"final"=>35], "DBMS"=>["test"=>28,"final"=>32]]],
];
$subjectList = ["C++", "C#", "PHP", "DBMS"];

echo "<table border='1'>";
echo "<tr><th>#</th><th>Name</th>";
foreach ($subjectList as $subj) {
    echo "<th>$subj Test</th><th>$subj Final</th>";
}
echo "<th>Total</th></tr>";

foreach ($students as $i => $student) {
    $total = 0;
    echo "<tr><td>" . ($i + 1) . "</td>";
    echo "<td>{$student['name']}</td>";
    foreach ($student['subjects'] as $marks) {
        echo "<td>{$marks['test']}</td>";
        echo "<td>{$marks['final']}</td>";
        $total += $marks['test'] + $marks['final'];
    }
    echo "<td><strong>$total</strong></td></tr>";
}
echo "</table>";
?>
Output — លទ្ធផល
# Name C++
Test
C++
Final
C#
Test
C#
Final
PHP
Test
PHP
Final
DBMS
Test
DBMS
Final
Total
Score
1 Sophal 40 35 38 37 35 40 33 32 290
2 Samnang 35 30 40 35 30 35 28 32 265
3 Chhun 35 35 40 30 35 30 30 35 270
4 Pheak 30 30 35 30 30 35 28 32 250
5 Davin 38 37 30 35 35 35 28 32 270
Summary — សង្ខេប Total Score និស្សិតនីមួយៗ

Sophal

290

Total Score

Samnang

265

Total Score

Chhun

270

Total Score

Pheak

250

Total Score

Davin

270

Total Score

Practice Note

  • រៀនបង្កើត Multidimensional Array (Array ក្នុង Array ក្នុង Array)
  • រៀនប្រើ nested foreach ដើម្បី loop ទិន្នន័យស្មុគស្មាញ
  • រៀនគណនា Total Score ក្នុង loop ដោយបន្ថែមតម្លៃម្ដងមួយៗ
  • រៀនរចនា table ដែលមាន columns ច្រើន ด้วย headers ច្បាស់លាស់