Advertisement
junbjn98

as2

Dec 21st, 2017
191
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 10.08 KB | None | 0 0
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4.     <title>Assignment 2</title>
  5.     <style type="text/css">
  6.         table {
  7.             border-collapse: collapse;
  8.         }
  9.         table tr td,
  10.         th {
  11.             border: 1px solid black;
  12.             text-align: center;
  13.             padding: 10px;
  14.         }
  15.     </style>
  16. </head>
  17. <body>
  18.     <h1>Bài 3</h1>
  19. <?php
  20. // Mảng 2 chiều (trong mảng chứa mảng, các phần tử của mảng là mảng)
  21. // Trong mảng $FFSE1703 có 3 phần tử
  22. $FFSE1703 = array(
  23.     // Đây là phần tử 0, là 1 mảng, $FFSE1703[0]
  24.     array(
  25.         // Đâ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']
  26.         'ID' => 1,
  27.         'Name' => "Nguyễn Văn A",
  28.         'LP0' => 9.2,
  29.         'LP1' => 8.7,
  30.         'LP2' => 7.8,
  31.     ),
  32.     // Phần tử 1, cũng là 1 mảng, $FFSE1703[1]
  33.     array(
  34.         'ID' => 2,
  35.         'Name' => "Nguyễn Văn B",
  36.         'LP0' => 7.3,
  37.         'LP1' => 1.7,
  38.         'LP2' => 8.8,
  39.     ),
  40.     // Phần tử 2, là 1 mảng luôn, $FFSE1703[2]
  41.     array(
  42.         'ID' => 3,
  43.         'Name' => "Nguyễn Văn C",
  44.         'LP0' => 9.5,
  45.         'LP1' => 5,
  46.         'LP2' => 9,
  47.     ),
  48. );
  49. /* Ban đầu mảng nó như thế này
  50. Array
  51. (
  52.     [0] => Array
  53.         (
  54.             [ID] => 1
  55.             [Name] => Nguyễn Văn A
  56.             [LP0] => 9.2
  57.             [LP1] => 8.7
  58.             [LP2] => 7.8
  59.         )
  60.  
  61.     [1] => Array
  62.         (
  63.             [ID] => 2
  64.             [Name] => Nguyễn Văn B
  65.             [LP0] => 7.3
  66.             [LP1] => 1.7
  67.             [LP2] => 8.8
  68.         )
  69.  
  70.     [2] => Array
  71.         (
  72.             [ID] => 3
  73.             [Name] => Nguyễn Văn C
  74.             [LP0] => 9.5
  75.             [LP1] => 5
  76.             [LP2] => 9
  77.         )
  78.  
  79. )*/
  80. // Lệnh này lặp từng phần tử trong mảng $FFSE1703
  81. foreach ($FFSE1703 as $key => $value) {
  82.     /*  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
  83.         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
  84.         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à
  85.         $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ố)
  86.         $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] = ...*/
  87.     $x[$key] = $FFSE1703[$key]['Điểm trung bình'] = round(($FFSE1703[$key]['LP0'] + $FFSE1703[$key]['LP1'] + $FFSE1703[$key]['LP2']) / 3, 2);
  88.     // Nếu $x[0] < 5, tức là cái điểm trung bình vừa tính < 5 thì nó sẽ ....
  89.     if ($x[$key] < 5) {
  90.         // Tạo thêm giá trị 'Xếp loại' trong mảng $FFSE1703[0] = ...
  91.         $FFSE1703[$key]['Xếp loại'] = 'Yếu';
  92.         // Còn ko thì nó xét tiếp <= 7, và tương tự
  93.     } elseif ($x[$key] <= 7) {
  94.         $FFSE1703[$key]['Xếp loại'] = 'Trung bình';
  95.     } elseif ($x[$key] <= 8.5) {
  96.         $FFSE1703[$key]['Xếp loại'] = 'Khá';
  97.     } else {
  98.         $FFSE1703[$key]['Xếp loại'] = 'Giỏi';
  99.     }
  100.     // 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]
  101. }
  102. /* Kết quả sau vòng lặp này thì mảng nó sẽ trở thành
  103. Array
  104. (
  105.     [0] => Array
  106.         (
  107.             [ID] => 1
  108.             [Name] => Nguyễn Văn A
  109.             [LP0] => 9.2
  110.             [LP1] => 8.7
  111.             [LP2] => 7.8
  112.             [Điểm trung bình] => 8.57
  113.             [Xếp loại] => Giỏi
  114.         )
  115.  
  116.     [1] => Array
  117.         (
  118.             [ID] => 2
  119.             [Name] => Nguyễn Văn B
  120.             [LP0] => 7.3
  121.             [LP1] => 1.7
  122.             [LP2] => 8.8
  123.             [Điểm trung bình] => 5.93
  124.             [Xếp loại] => Trung bình
  125.         )
  126.  
  127.     [2] => Array
  128.         (
  129.             [ID] => 3
  130.             [Name] => Nguyễn Văn C
  131.             [LP0] => 9.5
  132.             [LP1] => 5
  133.             [LP2] => 9
  134.             [Điểm trung bình] => 7.83
  135.             [Xếp loại] => Khá
  136.         )
  137. )
  138. Và mình sẽ có thêm 1 mảng $x chứa các giá trị trung bình như sau
  139.     Array
  140.     (
  141.         [0] => 8.57
  142.         [1] => 5.93
  143.         [2] => 7.83
  144.     )
  145. */
  146. echo "<table>";
  147. // 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
  148. // Tức là nó sẽ lấy [ID], [Name], [LP0], [LP1], [LP2], [Điểm trung bình], [Xếp loại]
  149. foreach ($FFSE1703[0] as $key => $value) {
  150.     echo "<th>$key";
  151. }
  152. // Cái vòng lặp này để in ra bảng
  153. // Nó sẽ lặp cái mảng $FFSE1703 (gồm 3 phần tử $FFSE1703[0], $FFSE1703[1] và $FFSE1703[2])
  154. foreach ($FFSE1703 as $stt => $value) {
  155.     // Đầ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ó
  156.     // Mỗi phần tử là 1 hàng, nên echo tr cho nó ra 1 hàng
  157.     echo "<tr>";
  158.     // Ở đây $stt đang là 0 nên nó sẽ lặp qua các phần tử $FFSE1703[0]
  159.     foreach ($FFSE1703[$stt] as $key => $value) {
  160.         // 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
  161.         // 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]
  162.         echo "<td>$value";
  163.         // 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)
  164.         if ($key == 'Điểm trung bình') {
  165.             // 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)
  166.             if ($value == max($x)) {
  167.                 // Nó sẽ tạo 1 biến $stt_max = cái $stt của mảng $FFSE1703
  168.                 // 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
  169.                 $stt_max = $stt;
  170.             }
  171.         }
  172.         // Tương tự với hàm min
  173.         if ($key == 'Điểm trung bình') {
  174.             if ($value == min($x)) {
  175.                 $stt_min = $stt;
  176.             }
  177.         }
  178.     }
  179.     // Sau khi chạy xong phần tử $FFSE1703[0], nó chạy tiếp $FFSE1703[1] và $FFSE1703[2]
  180. }
  181. // 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
  182. // 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
  183. echo ("</table><p>Người có điểm trung bình cao nhất là: " . $FFSE1703[$stt_max]['Name']);
  184. // Tương tự với min
  185. echo ("<p>Người có điểm trung bình thấp nhất là: " . $FFSE1703[$stt_min]['Name'] . "</p>");
  186. /*  Hàm này sẽ sắp xếp lại thứ tự mảng theo thứ tự giảm dần
  187.     Ban đầu nó là
  188.         Array
  189.         (
  190.             [0] => 8.57
  191.             [1] => 5.93
  192.             [2] => 7.83
  193.         )
  194.     Còn sau khi chạy nó là
  195.         Array
  196.         (
  197.             [0] => 8.57
  198.             [1] => 7.83
  199.             [2] => 5.93
  200.         )
  201. */
  202. rsort($x);
  203. // 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)
  204. echo "<table>";
  205. foreach ($FFSE1703[0] as $key => $value) {
  206.     echo "<th>$key";
  207. }
  208. // Ý 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ó
  209. // 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
  210. foreach ($x as $key => $value) {
  211.     // Ví dụ đầu tiên nó sẽ lấy cái [0] => 8.57, $key ở đây là 0 và $value là 8.57
  212.     // 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
  213.     foreach ($FFSE1703 as $stt => $value) {
  214.         echo "<tr>";
  215.         /*  Đầ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
  216.             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ụ
  217.                 $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", ...
  218.                 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"
  219.             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
  220.             array_search($x[0], $FFSE1703[0]), mà $x[0] = 8.57, tức là
  221.             array_search(8.57, $FFSE1703[0])
  222.             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'
  223.             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
  224.             Ở đâ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
  225.         */
  226.         if (array_search($x[$key], $FFSE1703[$stt]) == 'Điểm trung bình') {
  227.             // Hàm này in ra bảng, giống ở trên
  228.             foreach ($FFSE1703[$stt] as $key => $value) {
  229.                 echo "<td>$value";
  230.             }
  231.         }
  232.     }
  233.     /*  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
  234.         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
  235.         Ví dụ đầu tiên nó sẽ tìm ở mảng $FFSE1703[0], ko thấy $value nào = 7.83
  236.         Sau đó tìm tiếp mảng $FFSE1703[1], cũng ko có
  237.         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'
  238.         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]
  239.         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
  240.         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
  241.     */
  242. }
  243. ?>
  244. </body>
  245. </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement