tek4

Mảng trong PHP

by - September. 21, 2021
Kiến thức
Học
<p>Mảng l&agrave; kh&aacute;i niệm quan trọng trong lập tr&igrave;nh bởi người lập tr&igrave;nh vi&ecirc;n c&oacute; thể dễ d&agrave;ng l&agrave;m việc với dữ liệu. Trong b&agrave;i viết n&agrave;y, ta sẽ c&ugrave;ng t&igrave;m hiểu về mảng trong PHP.</p> <h1>Mảng trong PHP</h1> <p>Mảng l&agrave; một biến đặc biệt, c&oacute; thể chứa nhiều gi&aacute; trị c&ugrave;ng một l&uacute;c. Nếu ta c&oacute; một danh s&aacute;ch c&aacute;c phần tử (v&iacute; dụ: một danh s&aacute;ch chứa c&aacute;c t&ecirc;n của c&aacute;c sinh vi&ecirc;n c&aacute;c trường), th&igrave; việc lưu trữ c&aacute;c sinh vi&ecirc;n trong một biến c&oacute; thể như sau:</p> <pre class="EnlighterJSRAW" data-enlighter-language="generic">$sinh_vien1 = "Truong Y"; $sinh_vien2 = "Truong Luat"; $sinh_vien3 = "Truong Ky thuat";</pre> <p>Tuy nhi&ecirc;n, nếu ta muốn duyệt v&ograve;ng qua những sinh vi&ecirc;n của c&aacute;c trường v&agrave; t&igrave;m ra một sinh vi&ecirc;n cụ thể th&igrave; cần l&agrave;m như n&agrave;o? V&agrave; nếu kh&ocirc;ng phải con số sinh vi&ecirc;n l&agrave; 3, m&agrave; l&agrave; 1000 sinh vi&ecirc;n? Giải ph&aacute;p đ&oacute; ch&iacute;nh l&agrave; tạo một mảng!</p> <p>Một mảng c&oacute; thể chứa nhiều gi&aacute; trị trong một biến duy nhất v&agrave; ta c&oacute; thể truy cập c&aacute;c gi&aacute; trị bằng c&aacute;ch tham chiếu đến một số chỉ mục như sau.</p> <pre class="EnlighterJSRAW" data-enlighter-language="generic">$sinh_vien[0] = "Truong Y"; $sinh_vien[1] = "Truong Luat"; $sinh_vien[2] = "Truong Ky thuat";</pre> <h2>Tạo một mảng</h2> <p>Trong PHP, h&agrave;m array() được sử dụng để tạo một mảng như sau.</p> <p><em>C&uacute; ph&aacute;p:</em></p> <pre class="EnlighterJSRAW" data-enlighter-language="generic">array(phần tử);</pre> <p>V&iacute; dụ:</p> <pre class="EnlighterJSRAW" data-enlighter-language="php">&lt;?php $sinh_vien = array("Truong Y", "Truong Luat", "Truong Ky thuat"); echo $sinh_vien[0]; ?&gt;</pre> <p>Trong đ&oacute; $sinh_vien[i] l&agrave; phần tử của mảng với i l&agrave; chỉ số của c&aacute;c phần tử.</p> <h2>Lấy độ d&agrave;i của một mảng</h2> <p>H&agrave;m count() được sử dụng để trả về độ d&agrave;i hay số lượng phần tử của một mảng.</p> <p>V&iacute; dụ:</p> <pre class="EnlighterJSRAW" data-enlighter-language="php">&lt;?php $sinh_vien = array("Truong Y", "Truong Luat", "Truong Ky thuat"); echo count($sinh_vien); ?&gt;</pre> <p>Kết quả:</p> <pre>3</pre> <h2>C&aacute;c kiểu mảng</h2> <p>Trong PHP, c&oacute; ba kiểu mảng:</p> <ol> <li>Mảng được lập chỉ số.</li> <li>Mảng li&ecirc;n kết: L&agrave; mảng c&oacute; c&aacute;c kh&oacute;a được đặt t&ecirc;n.</li> <li>Mảng đa chiều: L&agrave; mảng c&oacute; thể chứa một hoặc nhiều mảng.</li> </ol> <h3>1. Mảng được đ&aacute;nh chỉ số</h3> <p>Mảng được đ&aacute;nh chỉ số trong PHP l&agrave; một mảng được biểu thị bằng một chỉ số theo mặc định. Tất cả c&aacute;c phần tử của mảng được biểu diễn bằng một chỉ số c&oacute; gi&aacute; trị bắt đầu từ 0. Mảng được đ&aacute;nh chỉ số trong PHP c&oacute; thể lưu trữ dữ liệu kiểu số, chuỗi k&yacute; tự hoặc bất kỳ đối tượng n&agrave;o. C&oacute; hai c&aacute;ch để tạo mảng được đ&aacute;nh chỉ số. Chỉ số c&oacute; thể được chỉ định tự động trong đ&oacute;, chỉ số lu&ocirc;n bắt đầu từ 0, như sau:</p> <pre class="EnlighterJSRAW" data-enlighter-language="generic">$sinh_vien = array("Truong Y", "Truong Luat", "Truong Ky thuat");</pre> <p>Hoặc</p> <pre class="EnlighterJSRAW" data-enlighter-language="generic">$sinh_vien[0] = "Truong Y"; $sinh_vien[1] = "Truong Luat"; $sinh_vien[2] = "Truong Ky thuat";</pre> <p>Để lặp lại v&agrave; in tất cả c&aacute;c gi&aacute; trị của một mảng được đ&aacute;nh chỉ số, ta c&oacute; thể sử dụng v&ograve;ng lặp For như sau.</p> <p>V&iacute; dụ:</p> <pre class="EnlighterJSRAW" data-enlighter-language="php">&lt;?php $sinh_vien = array("Truong Y", "Truong Luat", "Truong Ky thuat"); $do_dai = count($sinh_vien); for($i = 0; $i &lt; $do_dai; $i++) { &nbsp; echo "$sinh_vien[$i]\r\n"; } ?&gt;</pre> <p>Kết quả:</p> <pre>Truong Y Truong Luat Truong Ky thuat</pre> <p>Ngo&agrave;i ra, ta c&oacute; thể sử dụng v&ograve;ng lặp Foreach để duyệt qua c&aacute;c phần tử của mảng. Tuy nhi&ecirc;n v&ograve;ng lặp n&agrave;y sẽ được t&igrave;m hiểu trong b&agrave;i sau.</p> <p>V&iacute; dụ 2: Duyệt qua phần tử sử dụng v&ograve;ng lặp Foreach.</p> <pre class="EnlighterJSRAW" data-enlighter-language="php">&lt;?php $sinh_vien = array("Truong Y", "Truong Luat", "Truong Ky thuat"); foreach($sinh_vien as $sv) { &nbsp; echo "$sv\r\n"; } ?&gt;</pre> <p>Kết quả:</p> <pre>Truong Y Truong Luat Truong Ky thuat</pre> <h3>2. Mảng li&ecirc;n kết trong PHP</h3> <p>PHP cho ph&eacute;p ta li&ecirc;n kết t&ecirc;n hay nh&atilde;n với từng gi&aacute; trị của từng phần tử trong mảng bằng c&aacute;ch sử dụng k&yacute; hiệu =&gt;. Như vậy, ta c&oacute; thể dễ d&agrave;ng nhớ c&aacute;c phần tử hơn. Mảng li&ecirc;n kết l&agrave; mảng sử dụng c&aacute;c kh&oacute;a được đặt t&ecirc;n m&agrave; ta sẽ g&aacute;n.</p> <p>C&oacute; hai c&aacute;ch để tạo một mảng li&ecirc;n kết:</p> <pre class="EnlighterJSRAW" data-enlighter-language="generic">$sinh_vien = array("Truong Y" =&gt; "12", "Truong Luat" =&gt; "13", "Truong Ky thuat" =&gt; "14");</pre> <p>Hoặc</p> <pre class="EnlighterJSRAW" data-enlighter-language="generic">$sinh_vien['Truong Y'] = "12"; $sinh_vien['Truong Luat'] = "13"; $sinh_vien['Truong Ky thuat'] = "14";</pre> <p>V&iacute; dụ:</p> <pre class="EnlighterJSRAW" data-enlighter-language="php">&lt;?php $sinh_vien = array("Truong Y" =&gt; "12", "Truong Luat" =&gt; "13", "Truong Ky thuat" =&gt; "14"); echo "Sinh vien truong Y co ID la: " .$sinh_vien['Truong Y']; ?&gt;</pre> <p>Kết quả:</p> <pre>Sinh vien truong Y co ID la: 12</pre> <p>Để lặp lại v&agrave; in tất cả c&aacute;c gi&aacute; trị của một mảng li&ecirc;n kết, ta c&oacute; thể sử dụng một v&ograve;ng lặp Foreach như sau:</p> <p>V&iacute; dụ:</p> <pre class="EnlighterJSRAW" data-enlighter-language="php">&lt;?php $sinh_vien = array("Truong Y" =&gt; "12", "Truong Luat" =&gt; "13", "Truong Ky thuat" =&gt; "14"); foreach($sinh_vien as $i =&gt; $j) { &nbsp; echo "Sinh vien truong ".$i." co ID la: ".$j."\r\n"; } ?&gt;</pre> <p>Kết quả:</p> <pre>Sinh vien truong Truong Y co ID la: 12 Sinh vien truong Truong Luat co ID la: 13 Sinh vien truong Truong Ky thuat co ID la: 14</pre> <h3>3. Mảng đa chiều trong PHP</h3> <p>Mảng nhiều chiều l&agrave; mảng chứa một hoặc nhiều mảng kh&aacute;c. PHP hỗ trợ c&aacute;c mảng đa chiều c&oacute; độ s&acirc;u từ hai, hoặc N chiều. Tuy nhi&ecirc;n, mảng 3 chiều trở đi sẽ c&oacute; độ phức tạp ng&agrave;y c&agrave;ng cao.</p> <p>Mảng hai chiều: Mảng hai chiều l&agrave; một mảng của c&aacute;c mảng kh&aacute;c.</p> <p>V&iacute; dụ:</p> <table> <tbody> <tr> <td>T&ecirc;n trường</td> <td>ID</td> <td>Địa điểm</td> </tr> <tr> <td>Trường Y</td> <td>12</td> <td>A</td> </tr> <tr> <td>Trường Luật</td> <td>13</td> <td>B</td> </tr> <tr> <td>Trường Kỹ thuật</td> <td>14</td> <td>C</td> </tr> </tbody> </table> <p>Ch&uacute;ng ta c&oacute; thể lưu trữ dữ liệu từ bảng tr&ecirc;n trong một mảng hai chiều, như sau:</p> <pre class="EnlighterJSRAW" data-enlighter-language="generic">$sinh_vien = array ( &nbsp; array("Truong Y",12, &ldquo;A&rdquo;), &nbsp; array("Truong Luat",13, &ldquo;B&rdquo;), &nbsp; array("Truong Ky thuat",14, &ldquo;C&rdquo;), );</pre> <p>B&acirc;y giờ mảng $sinh_vien hai chiều chứa 3 mảng con v&agrave; n&oacute; c&oacute; hai chỉ số: h&agrave;ng v&agrave; cột. Để truy cập v&agrave;o c&aacute;c phần tử của mảng, ch&uacute;ng ta phải trỏ đến hai chỉ số (h&agrave;ng v&agrave; cột):</p> <pre class="EnlighterJSRAW" data-enlighter-language="php">&lt;?php $sinh_vien = array ( &nbsp; array("Truong Y",12,"A"), &nbsp; array("Truong Luat",13,"B"), &nbsp; array("Truong Ky thuat",14,"C"), ); echo $sinh_vien[0][0]." co ID la: ".$sinh_vien[0][1].", Dia diem la: ".$sinh_vien[0][2]."\r\n"; echo $sinh_vien[1][0]." co ID la: ".$sinh_vien[1][1].", Dia diem la: ".$sinh_vien[1][2]."\r\n"; echo $sinh_vien[2][0]." co ID la: ".$sinh_vien[2][1].", Dia diem la: ".$sinh_vien[2][2]."\r\n"; ?&gt;</pre> <p>Ch&uacute;ng ta cũng c&oacute; thể đặt một v&ograve;ng lặp For b&ecirc;n trong một v&ograve;ng lặp For kh&aacute;c để lấy c&aacute;c phần tử của mảng:</p> <p>V&iacute; dụ:</p> <pre class="EnlighterJSRAW" data-enlighter-language="php">&lt;?php $sinh_vien = array ( &nbsp; array("Truong Y",12,"A"), &nbsp; array("Truong Luat",13,"B"), &nbsp; array("Truong Ky thuat",14,"C"), ); for ($row = 0; $row &lt; 3; $row++) { &nbsp; for ($col = 0; $col &lt; 3; $col++) { &nbsp;&nbsp;&nbsp; echo $sinh_vien[$row][$col]; &nbsp;&nbsp;&nbsp; echo " "; &nbsp; } &nbsp; echo "\r\n"; } ?&gt;</pre> <p>Kết quả:</p> <pre>Truong Y 12 A Truong Luat 13 B Truong Ky thuat 14 C</pre> <h2>Sắp xếp thứ tự cho c&aacute;c mảng</h2> <p>C&aacute;c phần tử trong một mảng c&oacute; thể được sắp xếp theo thứ tự bảng chữ c&aacute;i hoặc số, theo thứ tự giảm dần hoặc tăng dần.</p> <p>C&aacute;c h&agrave;m sắp xếp cho mảng. Trong phần n&agrave;y, ch&uacute;ng ta sẽ c&ugrave;ng xem x&eacute;t c&aacute;c h&agrave;m sắp xếp sau:</p> <ul> <li>H&agrave;m sort(): Sắp xếp c&aacute;c mảng theo thứ tự tăng dần.</li> <li>H&agrave;m rsort(): Sắp xếp c&aacute;c mảng theo thứ tự giảm dần.</li> <li>H&agrave;m asort(): Sắp xếp c&aacute;c mảng li&ecirc;n kết theo thứ tự tăng dần, theo gi&aacute; trị.</li> <li>H&agrave;m ksort(): Sắp xếp c&aacute;c mảng li&ecirc;n kết theo thứ tự tăng dần, theo kh&oacute;a.</li> <li>H&agrave;m arsort(): Sắp xếp c&aacute;c mảng li&ecirc;n kết theo thứ tự giảm dần, theo gi&aacute; trị.</li> <li>H&agrave;m krsort(): Sắp xếp c&aacute;c mảng li&ecirc;n kết theo thứ tự giảm dần, theo kh&oacute;a.</li> </ul> <p>V&iacute; dụ: Sắp xếp mảng theo thứ tự tăng dần sử dụng h&agrave;m sort()</p> <pre class="EnlighterJSRAW" data-enlighter-language="php">&lt;?php $sinh_vien = array("Truong Y", "Truong Luat", "Truong Ky thuat"); sort($sinh_vien); foreach($sinh_vien as $phan_tu){ &nbsp;&nbsp;&nbsp; echo $phan_tu."\r\n"; } ?&gt;</pre> <p>Kết quả:</p> <pre>Truong Ky thuat Truong Luat Truong Y</pre> <p>Trong đoạn m&atilde; tr&ecirc;n, ta đ&atilde; thực hiện sắp xếp theo thứ tự tăng dần dựa theo bảng chữ c&aacute;i cho mảng.</p> <p>V&iacute; dụ: Sắp xếp mảng theo thứ tự giảm dần bằng h&agrave;m rsort()</p> <pre class="EnlighterJSRAW" data-enlighter-language="php">&lt;?php $sinh_vien = array("Truong Y", "Truong Luat", "Truong Ky thuat"); rsort($sinh_vien); foreach($sinh_vien as $phan_tu){ &nbsp;&nbsp;&nbsp; echo $phan_tu."\r\n"; } ?&gt;</pre> <p>Kết quả:</p> <pre>Truong Y Truong Luat Truong Ky thuat</pre> <p>Trong đoạn m&atilde; tr&ecirc;n, ta đ&atilde; thực hiện sắp xếp theo thứ tự giảm dần dựa theo bảng chữ c&aacute;i cho mảng.</p> <p>V&iacute; dụ: Sắp xếp mảng theo thứ tự tăng dần dựa tr&ecirc;n gi&aacute; trị h&agrave;m asort()</p> <pre class="EnlighterJSRAW" data-enlighter-language="php">&lt;?php $sinh_vien = array("Truong Y" =&gt; "12", "Truong Luat" =&gt; "13", "Truong Ky thuat" =&gt; "14"); asort($sinh_vien); foreach($sinh_vien as $phan_tu =&gt; $gia_tri){ &nbsp;&nbsp;&nbsp; echo $gia_tri." ".$phan_tu."\r\n"; } ?&gt;</pre> <p>Kết quả:</p> <pre>12 Truong Y 13 Truong Luat 14 Truong Ky thuat</pre> <p>V&iacute; dụ: Sắp xếp mảng theo thứ tự tăng dần dựa tr&ecirc;n kh&oacute;a bằng h&agrave;m asort()</p> <pre class="EnlighterJSRAW" data-enlighter-language="php">&lt;?php $sinh_vien = array("Truong Y" =&gt; "12", "Truong Luat" =&gt; "13", "Truong Ky thuat" =&gt; "14"); ksort($sinh_vien); foreach($sinh_vien as $phan_tu =&gt; $gia_tri){ &nbsp;&nbsp;&nbsp; echo $phan_tu." ".$gia_tri."\r\n"; } ?&gt;</pre> <p>Kết quả:</p> <pre>Truong Ky thuat 14 Truong Luat 13 Truong Y 12</pre> <p>V&iacute; dụ: Sắp xếp mảng theo thứ tự giảm dần dựa tr&ecirc;n gi&aacute; trị bằng h&agrave;m arsort().</p> <pre class="EnlighterJSRAW" data-enlighter-language="php">&lt;?php $sinh_vien = array("Truong Y" =&gt; "12", "Truong Luat" =&gt; "13", "Truong Ky thuat" =&gt; "14"); arsort($sinh_vien); foreach($sinh_vien as $phan_tu =&gt; $gia_tri){ &nbsp;&nbsp;&nbsp; echo $gia_tri." ".$phan_tu."\r\n"; } ?&gt;</pre> <p>Kết quả:</p> <pre>14 Truong Ky thuat 13 Truong Luat 12 Truong Y</pre> <p>V&iacute; dụ: Sắp xếp mảng theo thứ tự giảm dần dựa tr&ecirc;n kh&oacute;a bằng h&agrave;m krsort().</p> <pre class="EnlighterJSRAW" data-enlighter-language="php">&lt;?php $sinh_vien = array("Truong Y" =&gt; "12", "Truong Luat" =&gt; "13", "Truong Ky thuat" =&gt; "14"); krsort($sinh_vien); foreach($sinh_vien as $phan_tu =&gt; $gia_tri){ &nbsp;&nbsp;&nbsp; echo $phan_tu." ".$gia_tri."\r\n"; } ?&gt;</pre> <p>Kết quả:</p> <pre>Truong Y 12 Truong Luat 13 Truong Ky thuat 14</pre> <p>Tr&ecirc;n đ&acirc;y l&agrave; kh&aacute;i niệm v&agrave; v&iacute; dụ cơ bản về mảng trong PHP. Hy vọng mọi người c&oacute; thể &aacute;p dụng v&agrave;o trong chương tr&igrave;nh của m&igrave;nh. Mọi người h&atilde;y tiếp tục theo d&otilde;i c&aacute;c b&agrave;i tiếp theo v&agrave; cập nhật c&aacute;c b&agrave;i mới nhất tr&ecirc;n <a href="http://tek4.vn">tek4</a> nh&eacute;!</p> <p>P/s: Cảm ơn mọi người!</p>