Đây là bài viết thứ 9 trong series học PHP căn bản, trong bài này mình sẽ chỉ giới thiệu về mảng (Array) trong PHP và các kiến thức liên quan đến mảng mà các bạn cần nắm vững.
Trước đây mình đã từng giới thiệu và nói qua về mảng ở bài 3: các kiểu dữ liệu trong PHP. Nhưng qua bài này mình sẽ trình bày lại tất cả nhé!
Cũng như bao ngôn ngữ lập trình khác. PHP cũng tồn tại một loại dữ liệu được gọi là mảng. Mảng Array là một loại biến đặc biệt, trong nó giữ nhiều giá trị. Mỗi giá trị trong mảng được gọi là phần tử của mảng.
Một mảng là một cấu trúc dữ liệu mà lưu giữ danh sách các phần tử có cùng kiểu dữ liệu và nó là một trong các kiểu dữ liệu trong php có độ phức tạp tính toán cao. Riêng với PHP thì các phần tử của mảng có thể không cùng kiểu dữ liệu, và các phần tử của mảng thường được truy xuất thông qua các chỉ mục(vị trí) của nó nằm trong mảng.
Cú pháp tạo một mảng
Để tạo mảng chúng ta sử dụng hàm array()
trong PHP (Từ PHP 5.4 trở lên bạn chỉ cần viết giá trị trong cặp dấu [ ] cũng được)
Note: Các bạn dùng hàm var_dump($mang); để in ra các phần tử của mạng để test trong quá trình học nhé. Hàm này có thể sử dụng được tất cả các kiểu dữ liệu trong php. (Hàm var_dump chỉ dùng để test).
//cách tạo mảng 1 <?php $names=array("Tan","Binh","Minh"); var_dump($names); ?>
//cách tạo mảng 2 <?php $names=array( 0 => 'Tan', 1 => 'Binh', 2 => 'Minh' ); var_dump($names); ?>
//cách tạo mảng 3 <?php $names=array(); $names[0] = 'Tan'; $names[1] = 'Binh'; $names[2] = 'Minh'; var_dump($names); ?>
//cách tạo mảng 4 <?php $names=array(); $names[] = 'Tan'; $names[] = 'Binh'; $names[] = 'Minh'; var_dump($names); ?>
Có 3 loại mảng trong PHP
- Mảng indexed – Mảng được lập chỉ mục
- Mảng associative – Mảng liên hợp
- Mảng Multidimensional – Mảng chứa một hoặc nhiều mảng
Chúng ta sẽ cùng tìm hiểu theo thứ tự từng loại mảng trên.
Loại 1. Indexed Arrays – Mảng được lập chỉ mục
Các mảng này có thể lưu trữ số, chuỗi và bất kỳ đối tượng nào nhưng chỉ mục của chúng sẽ được biểu diễn bằng dạng số. Một biến mảng dạng này chỉ số sẽ gán một cách tự động, theo chỉ mục mảng mặc định bắt đầu từ số không khi phần tử đầu tiên được thêm vào, cứ thế phần tử thứ 2 thêm vào mảng sẽ có chỉ số là 1.
Ví dụ minh họa cách tạo và truy cập mảng số được lập chỉ mục trong PHP.
<?php /*Ví dụ 1: xuất danh sách các tên có trong mảng bằng cách sử dụng vòng lặp */ $names = array( "Nam", "Mai", "Trúc", "Linh", "Phong"); foreach( $names as $value ) // sử dụng vòng lặp foreacch để duyệt phần tử trong mảng { echo "Tên: $value <br />"; } var_dump($names); //xuất mảng /*Ví dụ 2: xuất lần lượt các giá trị có trong mảng */ $numbers[0] = "one"; $numbers[1] = 2; $numbers[2] = "three"; $numbers[3] = 4; $numbers[4] = "five"; var_export($numbers); ?>
sau khi chạy lên, kết quả của lệnh var_dump($names);
trên màn hình như sau:
array (size=5) 0 => string 'Nam' (length=3) 1 => string 'Mai' (length=3) 2 => string 'Trúc' (length=5) 3 => string 'Linh' (length=4) 4 => string 'Phong' (length=5)
Như vậy phần tử có chỉ số 0
thì giá trị là 'Nam'
, chỉ số 1
giá trị là ‘Mai’ … chỉ số này dùng với ký hiệu Array_Name[indexed] để truy xuất ( đọc hoặc gán) phần tử mảng:
Ví dụ về truy xuất Array_Name[indexed]
Từ ví dụ bên trên ta sẽ truy xuất 1 phần tử trong mảng ra như sau:
<?php /*Ví dụ 1: xuất danh sách các tên có trong mảng bằng cách sử dụng vòng lặp */ $names = array( "Nam", "Mai", "Trúc", "Linh", "Phong"); foreach( $names as $value ) // sử dụng vòng lặp foreacch để duyệt phần tử trong mảng { echo "Tên: $value <br />"; } var_dump($names); //truy xuất phần tử có chỉ mục là số 1 có trong mảng $names echo $names[1]; //kết quả xuất ra màn hình sẽ là 'Mai' ?>
Thêm phần tử mới vào mảng
Bạn có thể thêm phần tử mới vào trong mảng bằng cách viết bên dưới:
$arrayName[indexed] = $giatri; // biến $giatri có thể là một biến có sẵn hoặc cũng có thể là một giá trị mới mà bạn muốn gán vào. //phần tử mới nhất được thêm vào sẽ luôn nằm cuối mảng, dù cho giá trị index có là bao nhiêu đi chăng nữa
Ví dụ 1:
<?php /*Ví dụ 1: xuất danh sách các tên có trong mảng bằng cách sử dụng vòng lặp */ $names = array( "Nam", "Mai", "Trúc", "Linh", "Phong"); //thêm 2 phần tử mới vào mảng $names $names[7]=0; $names[6]=9; var_dump($names); ?>
Kết quả thấy được sẽ là:
array (size=7) 0 => string 'Nam' (length=3) 1 => string 'Mai' (length=3) 2 => string 'Trúc' (length=5) 3 => string 'Linh' (length=4) 4 => string 'Phong' (length=5) 7 => int 0 6 => int 9
Bạn thấy mặc dù chỉ số 6 bé hơn chỉ số 7 nhưng khi biểu diễn trong mảng nó lại nằm dưới chỉ số 7, Bởi vì khi thêm phần tử mình đã cố ý thêm phần tử có chỉ số 7 trước cho nên nó sẽ được thêm vào mảng trước phần tử có chỉ số là 6.
Điều này sẽ tuân thủ quy tắc: phần tử mới nhất được thêm vào sẽ luôn nằm cuối mảng, dù cho giá trị index có là bao nhiêu đi chăng nữa
Có một cách thêm thứ 2 mà bạn cần biết đó là phương pháp thêm sau:
$arrayName[] = $giatri; // biến $giatri có thể là một biến có sẵn hoặc cũng có thể là một giá trị mới mà bạn muốn gán vào. // Phần tử này khi được thêm vào sẽ nằm phía sau phần tử cuối cùng của mảng. Khi đó chỉ số phần tử này sẽ bằng chỉ số lớn nhất của mảng cộng thêm 1 // nếu đây là phần tử đầu tiên của mảng thì chỉ số sẽ là 0
Ví dụ 2:
<?php /*Ví dụ 1: xuất danh sách các tên có trong mảng bằng cách sử dụng vòng lặp */ $names = array( "Nam", "Mai", "Trúc", "Linh", "Phong"); //thêm 2 phần tử mới vào mảng $names $names[7]=0; $names[6]=9; //thêm phần tử mới vào mảng $names theo cách 2 $names[] = 100; $names[] = "hé nô"; var_dump($names); ?>
Kết quả trên màn hình sẽ là:
array (size=9) 0 => string 'Nam' (length=3) 1 => string 'Mai' (length=3) 2 => string 'Trúc' (length=5) 3 => string 'Linh' (length=4) 4 => string 'Phong' (length=5) 7 => int 0 6 => int 9 8 => int 100 9 => string 'hé nô' (length=7)
2 cách thêm phần tử vào mảng trên cách nào cũng đúng cả, tuỳ vào cách sử dụng của mỗi người và tuỳ vào trường hợp của bài toán mà ta sẽ phải lựa chọn cho phù hợp.
Loại 2. Associative Arrays– Mảng liên hợp
Các mảng liên hợp là khá giống với các mảng Indexed về tính năng, nhưng chúng khác nhau về chỉ mục. Chỉ mục của Associative Arrays sẽ ở dạng chuỗi(string) nhằm giúp bạn có thể thiết lập một liên kết mạnh giữa key và value.
<?php $numbers = [ 'one' => "số 1", 'two' => "số 2", 'three' => "số 3", 'four' => "số 4" ]; //dùng vòng lặp foreach để duyệt mảng foreach ($numbers as $key => $value) { echo "$key ($value)", PHP_EOL; // PHP_EOL tương tự như dấu cách (space) } // Kết quả màn hình: one (số 1) two (số 2) three (số 3) four (số 4) var_dump($numbers); ?>
Kết quả của var_dump($numbers); trên màn hình:
array (size=4) 'one' => string 'số 1' (length=6) 'two' => string 'số 2' (length=6) 'three' => string 'số 3' (length=6) 'four' => string 'số 4' (length=6)
Như vậy, từ ví dụ trên ta thấy chỉ mục của các phần tử bây giờ không còn là các số nguyên nữa mà là các chuỗi ký tự.
Trong vòng lặp foreach, khi xuất ra các $key (các chỉ mục) thì sẽ có giá trị tương ứng là các $value.
Và để lấy giá trị của phần tử bất kỳ trong mảng ta cũng không thể sử dụng theo cách echo $numbers[0] giống mảng indexed nữa, ta phải gọi đúng chỉ mục là các chuỗi ký tự giống như sau: echo $numbers[‘one’]. Như vậy mới có kết quả ra màn hình là ‘số 1’.
Loại 3. Multidimensional Arrays– Mảng đa chiều
Mảng đa chiều là mảng trong nó chứa một hay nhiều mảng khác. Tức là trong 1 mảng, mỗi phần tử của nó có thể sẽ là một mảng (các mảng con), và có thể mỗi phần tử của mảng con cũng sẽ là một mảng (các mảng cháu),..v.v..
Ví dụ: mảng 2 chiều xuất ra thông tin điểm môn học của các học sinh.
<?php $diem = [ 'Nguyễn Văn A' => [ 'Toán' => 8, 'Lý' => 7, 'Hóa' => 9 ], 'Nguyên Văn B' => [ 'Toán' => 6, 'Lý' => 5, 'Hóa' => 7 ], 'Nguyễn C' => [ 'Toán' => 4, 'Lý' => 9, 'Hóa' => 7 ], ]; foreach ($diem as $ten => $diem_hoc_tap) { echo $ten . "<br>"; foreach ($diem_hoc_tap as $tem_mon => $diem_cua_mon) { echo "__$tem_mon" . " - " . $diem_cua_mon . "<br>"; } echo "<br>"; } ?>
Kết quả:
Nguyễn Văn A __Toán - 8 __Lý - 7 __Hóa - 9 Nguyên Văn B __Toán - 6 __Lý - 5 __Hóa - 7 Nguyễn C __Toán - 4 __Lý - 9 __Hóa - 7
Các xuất phần tử trong mảng đa chiều bạn cần phải truyền đủ các chỉ mục thuộc các cấp có trong mảng.
Ở ví dụ trên là mảng 2 chiều, như vậy ta sẽ truyền cả 2 chỉ mục mới có thể xuất ra màn hình, nếu không sẽ báo lỗi.
echo $diem['Nguyễn Văn A']['Toán']; // kết quả : 8
Kết thúc
Vậy là qua bài trên mình đã giới thiệu cho các bạn về mảng cũng như nói rõ các loại mảng có trong PHP mà bạn cần nắm. Mảng là khái niệm mà bạn nên nắm vững để sau này đi vào phần lập trình PHP hướng đối tượng các bạn sẽ phải dùng rất nhiều.
Hàm, mảng và vòng lặp là 3 khái niệm bạn cần vững vàng để sau này áp dụng vào lập trình PHP có lết hợp với cấu trúc dữ liệu MySql cũng như lập trình hướng đối tượng. Nếu có thắc mắc hay có chỗ nào sai sót mong các bạn để lại comment bên dưới bài viết chúng mình cũng thảo luận nhé!
Ở bài viết tiếp theo của series học PHP căn bản mình sẽ nói về các hàm xử lý cho mảng để các bạn có thể áp dụng sau này. Hãy tiếp tục với series học PHP căn nản nha ❤️
Xem thêm:
Leave a Reply