Đây là bài viết thứ 10 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 để áp dụng vào học tập và công việc sau này.
Trước đây mình đã từng giới thiệu và nói sơ qua về mảng ở bài 3: các kiểu dữ liệu trong PHP. Nhưng trong bài này mình sẽ trình bày lại tất cả để các bạn hiểu rõ về nó!
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 cũng được, 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í hay ta thường dùng là index) 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. (Lưu ý: Hàm var_dump chỉ dùng để test).
1. tạo mảng với giá trị
//cách tạo mảng 1 <?php $names = array("Tan","Binh","Minh"); var_dump($names); ?>
2. Tạo mảng với chỉ mục index và giá trị tương ứng
//cách tạo mảng 2 <?php $names = array( 0 => 'Tan', 1 => 'Binh', 2 => 'Minh' ); var_dump($names); ?>
3. Tạo mảng rỗng và lần lượt thêm giá trị phần tử tương ứng index
//cách tạo mảng 3 <?php $names = array(); $names[0] = 'Tan'; $names[1] = 'Binh'; $names[2] = 'Minh'; var_dump($names); ?>
4. Tạo mảng rỗng và lần lượt thêm giá trị vào mảng
//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 (index) 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ố 0 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ó index 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 cho 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 chặt chẽ 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..
Như vậy các bạn có thể hiểu mảng đa chiều giống như mảng lồng nhau (nested array.)
Ví dụ
Cho một 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
Để xuất ra giá trị của 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
Vì sao nên sử dụng mảng để chứa dữ liệu
Chúng ta nên sử dụng mảng để chứa dữ liệu vì 3 lý do sau đây
- Nội dung của Mảng có thể được kéo dài mà vẫn tiết kiệm bộ nhớ
- Mảng giúp dễ dàng lưu trữ và thao tác với các thông tin có liên quan đến nhau
- Sử dụng mảng giúp viết code sạch hơn.
So sánh 2 mảng bằng nhau với toán tử “=”
So sánh hai mảng nếu chúng bằng nhau thì trả về true. Đối với cách so sánh này ta có thể so sánh giữa chuỗi và số, miễn giống nhau kết quả vẫn là true.
Ví dụ:
<?php $x = array("id" => 1); $y = array("id" => "1"); if($x == $y) { echo "true"; } else { echo "false"; } //output: true ?>
Vì thế phương pháp so sánh này không mang tính tuyệt đối.
So sánh 2 mảng bằng nhau với “===”
Toán tử “===
” sẽ đem tất cả giá trị (value) và kiểu dữ liệu của key trong từng mảng ra để so sánh. Vì thế đây là phương pháp so sánh mang tính tuyệt đối.
<?php $x = array("id" => 1); $y = array("id" => "1"); if($x === $y) { echo "true"; } else { echo "false"; } //output: false ?>
<?php $x = array("id" => 1); $y = array("id" => 1); if($x === $y) { echo "true"; } else { echo "false"; } //output: true ?>
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 ❤️
Nếu các bạn cảm thấy Website TanHongIT.Com thật sự hữu ích mình mong các bạn có thể chia sẻ những bài viết đến cho cộng đồng cùng thao khảo nhé. Cảm ơn các bạn !!!
Các bạn có bất kì thắc mắc cần được hỗ trợ hay yêu cầu các phần mềm, thủ thuật, khoá học,… thì cứ để lại comment bên dưới bài viết hoặc liên hệ qua fanpage của TanHongIT để được hỗ trợ nhé! Mình sẽ cố gắng chia sẻ cho các bạn mọi thứ cần thiết nhất!
Xem thêm:
- Bài 3: Những kiểu dữ liệu trong PHP
- Bài 4: Toán tử và biểu thức trong PHP
- Bài 5: Biểu Thức Điều Kiện Trong PHP (Lệnh if, else, switch)
- Bài 6: Các loại Vòng lặp trong PHP (for, while, do while)
- Bài 7: Vòng lặp Foreach trong PHP (Các loại vòng lặp phần 2)
- Bài 8: lệnh Break, Continue và các hàm (function) exit, die thường dùng trong PHP
- Bài 11: Các hàm xử lý mảng (Array) trong PHP