I. សំនួរទ្រឹស្តី (Theory Questions)
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>";
?>
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
?>
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)
?>
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>";
}
?>| Feature | Numeric Array | Associative Array |
|---|---|---|
| Key Type | Integer (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)
បង្កើត Associative Array ដើម្បីផ្ទុកទិន្នន័យសៀវភៅ ដែលមាន columns: BookID, Title, Author, Price, Year។ បន្ទាប់មកប្រើ foreach ដើម្បី loop រាល់សៀវភៅ ហើយបង្ហាញជាតារាង (table)។
<?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>";
?>| # | 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)
បង្កើត Numeric Array ដើម្បីផ្ទុកពិន្ទុ (scores)។ ប្រើ foreach ដើម្បី loop រាល់ score ហើយបង្ហាញជាតារាង រួមទាំងគណនា Total, Average (format 2 decimals), និង Grade។
<?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>";
?>| # | 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
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)
បង្កើត 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 ពិន្ទុ
<?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>";
?>| # | 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 |
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 ច្បាស់លាស់