Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <!DOCTYPE html>
- <html>
- <head>
- <title>Assignment 2</title>
- <style type="text/css">
- table {
- border-collapse: collapse;
- }
- table tr td,
- th {
- border: 1px solid black;
- text-align: center;
- padding: 10px;
- }
- </style>
- </head>
- <body>
- <h1>Bài 3</h1>
- <?php
- // Mảng 2 chiều (trong mảng chứa mảng, các phần tử của mảng là mảng)
- // Trong mảng $FFSE1703 có 3 phần tử
- $FFSE1703 = array(
- // Đây là phần tử 0, là 1 mảng, $FFSE1703[0]
- array(
- // Đây là phần tử trong mảng $FFSE1703[0], ví dụ muốn lấy tên thì sẽ nhập $FFSE1703[0]['Name']
- 'ID' => 1,
- 'Name' => "Nguyễn Văn A",
- 'LP0' => 9.2,
- 'LP1' => 8.7,
- 'LP2' => 7.8,
- ),
- // Phần tử 1, cũng là 1 mảng, $FFSE1703[1]
- array(
- 'ID' => 2,
- 'Name' => "Nguyễn Văn B",
- 'LP0' => 7.3,
- 'LP1' => 1.7,
- 'LP2' => 8.8,
- ),
- // Phần tử 2, là 1 mảng luôn, $FFSE1703[2]
- array(
- 'ID' => 3,
- 'Name' => "Nguyễn Văn C",
- 'LP0' => 9.5,
- 'LP1' => 5,
- 'LP2' => 9,
- ),
- );
- /* Ban đầu mảng nó như thế này
- Array
- (
- [0] => Array
- (
- [ID] => 1
- [Name] => Nguyễn Văn A
- [LP0] => 9.2
- [LP1] => 8.7
- [LP2] => 7.8
- )
- [1] => Array
- (
- [ID] => 2
- [Name] => Nguyễn Văn B
- [LP0] => 7.3
- [LP1] => 1.7
- [LP2] => 8.8
- )
- [2] => Array
- (
- [ID] => 3
- [Name] => Nguyễn Văn C
- [LP0] => 9.5
- [LP1] => 5
- [LP2] => 9
- )
- )*/
- // Lệnh này lặp từng phần tử trong mảng $FFSE1703
- foreach ($FFSE1703 as $key => $value) {
- /* Lần đầu tiên nó sẽ lấy phần tử 0 trong mảng $FFSE1703, tức là $FFSE1703[0], ở đây $key là 0, $value là 1 mảng
- Dòng này đặt biến $x là điểm trung bình, thêm [$key] vô cho biến này thành 1 mảng luôn
- Lần đầu tiên thì $key = 0 (duyệt phần tử 0 trong mảng) nên dòng này có nghĩa là
- $x[0] = $FFSE1703[0]['Điểm trung bình'] = ... (lấy 3 điểm trong mảng 0 cộng lại chia ra, làm tròn 2 chữ số)
- $x[0] là phần tử 0 của mảng x tức là mảng điểm trung bình, $FFSE1703[0]['Điểm trung bình'] là tạo thêm giá trị 'Điểm trung bình' trong mảng $FFSE1703[0] = ...*/
- $x[$key] = $FFSE1703[$key]['Điểm trung bình'] = round(($FFSE1703[$key]['LP0'] + $FFSE1703[$key]['LP1'] + $FFSE1703[$key]['LP2']) / 3, 2);
- // Nếu $x[0] < 5, tức là cái điểm trung bình vừa tính < 5 thì nó sẽ ....
- if ($x[$key] < 5) {
- // Tạo thêm giá trị 'Xếp loại' trong mảng $FFSE1703[0] = ...
- $FFSE1703[$key]['Xếp loại'] = 'Yếu';
- // Còn ko thì nó xét tiếp <= 7, và tương tự
- } elseif ($x[$key] <= 7) {
- $FFSE1703[$key]['Xếp loại'] = 'Trung bình';
- } elseif ($x[$key] <= 8.5) {
- $FFSE1703[$key]['Xếp loại'] = 'Khá';
- } else {
- $FFSE1703[$key]['Xếp loại'] = 'Giỏi';
- }
- // Sau khi làm xong hết phần tử $FFSE1703[0], nó sẽ làm tương tự với $FFSE1703[1] và $FFSE1703[2]
- }
- /* Kết quả sau vòng lặp này thì mảng nó sẽ trở thành
- Array
- (
- [0] => Array
- (
- [ID] => 1
- [Name] => Nguyễn Văn A
- [LP0] => 9.2
- [LP1] => 8.7
- [LP2] => 7.8
- [Điểm trung bình] => 8.57
- [Xếp loại] => Giỏi
- )
- [1] => Array
- (
- [ID] => 2
- [Name] => Nguyễn Văn B
- [LP0] => 7.3
- [LP1] => 1.7
- [LP2] => 8.8
- [Điểm trung bình] => 5.93
- [Xếp loại] => Trung bình
- )
- [2] => Array
- (
- [ID] => 3
- [Name] => Nguyễn Văn C
- [LP0] => 9.5
- [LP1] => 5
- [LP2] => 9
- [Điểm trung bình] => 7.83
- [Xếp loại] => Khá
- )
- )
- Và mình sẽ có thêm 1 mảng $x chứa các giá trị trung bình như sau
- Array
- (
- [0] => 8.57
- [1] => 5.93
- [2] => 7.83
- )
- */
- echo "<table>";
- // Lệnh này lặp qua mảng $FFSE1703[0] và lấy $key của mảng này, sau đó in ra cái hàng đầu tiên của table
- // Tức là nó sẽ lấy [ID], [Name], [LP0], [LP1], [LP2], [Điểm trung bình], [Xếp loại]
- foreach ($FFSE1703[0] as $key => $value) {
- echo "<th>$key";
- }
- // Cái vòng lặp này để in ra bảng
- // Nó sẽ lặp cái mảng $FFSE1703 (gồm 3 phần tử $FFSE1703[0], $FFSE1703[1] và $FFSE1703[2])
- foreach ($FFSE1703 as $stt => $value) {
- // Đầu tiên nó lấy phần tử 0 trong mảng, tức là cái mảng $FFSE1703[0], ở đây $stt là 0, $value là mảng con của nó
- // Mỗi phần tử là 1 hàng, nên echo tr cho nó ra 1 hàng
- echo "<tr>";
- // Ở đây $stt đang là 0 nên nó sẽ lặp qua các phần tử $FFSE1703[0]
- foreach ($FFSE1703[$stt] as $key => $value) {
- // In ra giá trị, ở đây đầu tiên nó sẽ duyệt qua cái [ID] => 1 ($key là 'ID', $value là 1), mình cần in value nên echo value thôi
- // Tiếp theo nó sẽ duyệt qua [Name] => Nguyễn Văn A, ..., [Điểm trung bình] => 8.57, [Xếp loại] => Giỏi rồi in cho tới hết hàng, thì sẽ hết vòng lặp $FFSE1703[0]
- echo "<td>$value";
- // Khi nó duyệt qua cái [Điểm trung bình], giả sử đang ở mảng $FFSE1703[0], nó duyệt qua phần tử [Điểm trung bình] => 8.57 ($key là 'Điểm trung bình', $value là 8.57)
- if ($key == 'Điểm trung bình') {
- // Nếu giá trị của cái điểm trung bình nó = max($x) (tức là giá trị lớn nhất của mảng $x, cụ thể ở đây là 8.57)
- if ($value == max($x)) {
- // Nó sẽ tạo 1 biến $stt_max = cái $stt của mảng $FFSE1703
- // Trong trường hợp này thì khi nó duyệt qua phần tử 0 đã lấy được cái giá trị max rồi, nên $stt_max sẽ là 0
- $stt_max = $stt;
- }
- }
- // Tương tự với hàm min
- if ($key == 'Điểm trung bình') {
- if ($value == min($x)) {
- $stt_min = $stt;
- }
- }
- }
- // Sau khi chạy xong phần tử $FFSE1703[0], nó chạy tiếp $FFSE1703[1] và $FFSE1703[2]
- }
- // Cuối cùng nó in ra người có điểm trung bình cao nhất, vì ở trên đã lấy được $stt_max, cụ thể ở đây là 0
- // Có nghĩa là mảng $FFSE1703[0] sẽ chứa tên người có điểm trung bình cao nhất, chỉ việc trỏ tới mảng này và lấy tên
- echo ("</table><p>Người có điểm trung bình cao nhất là: " . $FFSE1703[$stt_max]['Name']);
- // Tương tự với min
- echo ("<p>Người có điểm trung bình thấp nhất là: " . $FFSE1703[$stt_min]['Name'] . "</p>");
- /* Hàm này sẽ sắp xếp lại thứ tự mảng theo thứ tự giảm dần
- Ban đầu nó là
- Array
- (
- [0] => 8.57
- [1] => 5.93
- [2] => 7.83
- )
- Còn sau khi chạy nó là
- Array
- (
- [0] => 8.57
- [1] => 7.83
- [2] => 5.93
- )
- */
- rsort($x);
- // In thêm bảng sau khi đã sắp xếp, cũng tương tự trên, khác 1 cái là thêm điều kiện để nó in theo thứ tự của mảng $x (mảng chứa giá trị trung bình sau khi sắp xếp)
- echo "<table>";
- foreach ($FFSE1703[0] as $key => $value) {
- echo "<th>$key";
- }
- // Ý tưởng là mình sẽ lặp qua cái mảng $x (mảng chứa điểm trung bình) và lấy giá trị bên trong nó
- // Sau đó tìm giá trị này xem nó khớp với điểm trung bình của cái mảng nào trong 3 cái mảng $FFSE1703[0], $FFSE1703[1] và $FFSE1703[2] thì in ra
- foreach ($x as $key => $value) {
- // Ví dụ đầu tiên nó sẽ lấy cái [0] => 8.57, $key ở đây là 0 và $value là 8.57
- // Sau đó lặp 3 phần tử trong mảng $FFSE1703 để tìm xem ở đâu có cái điểm trung bình là 8.57
- foreach ($FFSE1703 as $stt => $value) {
- echo "<tr>";
- /* Đầu tiên nó sẽ tìm ở $FFSE1703[0], $stt lúc này là 0, $x[$key] lúc này tức là $x[0], $value là 8.57
- Hàm array_search nó sẽ search cái $value trong mảng và trả kết của là cái $key của $value đó, ví dụ
- $array=array("a"=>"banana","b"=>"apple","c"=>"orange"); // Mảng này gồm 3 phần tử, $key "a" ứng với $value "banana", ...
- echo (array_search("apple", $array)); // lệnh này nó sẽ search cái $value "apple" trong mảng, và in ra $key, cụ thể ở đây nó sẽ in ra "b"
- Tương tự với bài của mình, ban đầu với $key = 0, $stt = 0, nó sẽ search như này
- array_search($x[0], $FFSE1703[0]), mà $x[0] = 8.57, tức là
- array_search(8.57, $FFSE1703[0])
- Nó sẽ tìm giá trị 8.57 trong mảng, và in ra $key, cụ thể ở đây mảng $FFSE1703[0] có giá trị [Điểm trung bình] => 8.57, nên nó sẽ trả về 'Điểm trung bình'
- Xét hàm if, nếu giá trị trả về == 'Điểm trung bình' thì ta sẽ in ra bảng, còn ko thì ko in
- Ở đây do nó tìm thấy giá trị 8.57 ở ngay trong mảng đầu tiên, là mảng $FFSE1703[0], nên nó in dòng đầu ra cái này luôn
- */
- if (array_search($x[$key], $FFSE1703[$stt]) == 'Điểm trung bình') {
- // Hàm này in ra bảng, giống ở trên
- foreach ($FFSE1703[$stt] as $key => $value) {
- echo "<td>$value";
- }
- }
- }
- /* Tiếp theo nó sẽ duyệt qua $x[1] = 7.83. tức là duyệt qua phần tử 1 của mảng, với $value là 7.83
- Nó sẽ tìm trong 3 mảng, cái nào mà hàm array_search tìm được thì nó mới in
- Ví dụ đầu tiên nó sẽ tìm ở mảng $FFSE1703[0], ko thấy $value nào = 7.83
- Sau đó tìm tiếp mảng $FFSE1703[1], cũng ko có
- Tìm tiếp mảng $FFSE1703[2] thì thấy có $value này ở chỗ 'Điểm trung bình', nên nó trả về giá trị 'Điểm trung bình'
- Nó khớp với hàm if nên nó in ra dòng 2 là các giá trị trong mảng $FFSE1703[2]
- Cuối cùng nó duyệt cái $x[2] = 5.93 và tìm thấy ở $FFSE1703[1], nên in ra hàng còn lại
- Thứ tự nó in là $FFSE1703[0] => $FFSE1703[2] => $FFSE1703[1], có thể thêm vài phần tử nữa để test, hoặc sửa số điểm
- */
- }
- ?>
- </body>
- </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement