Mảng (Array) trong PHP
Giả sử chúng ta cần làm phần mềm đội bóng, số áo tất cả 11 cầu thủ phải được lưu và in. Nhiệm vụ này được thực hiện dễ dàng bằng cách sử dụng 11 biến số riêng biệt. Tuy nhiên, nếu con số tăng từ 11 lên một 10000, người dùng hoặc nhà phát triển sẽ khó xây dựng nhiều biến riêng biệt như vậy. Vì vậy, người ta sử dụng khái niệm mảng giúp lưu trữ mọi phần tử trong một biến duy nhất.
Mảng là một kiểu cấu trúc dữ liệu đặc biệt có thể lưu trữ một hoặc nhiều kiểu giá trị tương tự nhau. Mảng giúp lưu trữ danh sách các phần tử có kiểu tương tự có thể được truy cập thông qua chỉ mục hoặc khóa của chúng, trong một biến duy nhất. Điều này giúp giảm thiểu khó khăn trong việc tạo một biến riêng biệt cho từng dữ liệu.
Trong PHP, chúng ta có thể sử dụng hàm array() hoặc ký tự [ ] để khai báo một mảng.
Một mảng có thể lưu trữ nhiều giá trị có cùng tên và các giá trị có thể được truy cập bằng cách tham chiếu một số chỉ mục.
Trong PHP hỗ trợ 3 loại mảng như sau:
- Indexed arrays/Numberical Array – Mảng số: có chỉ mục số. Các giá trị được lưu trữ và truy cập một cách tuyến tính.
- Associative arrays – Mảng liên kết: Đây là một mảng có các chuỗi làm chỉ mục. Thay vì thứ tự chỉ mục tuyến tính nghiêm ngặt, mảng này lưu trữ các giá trị phần tử liên kết với một giá trị khóa là chuỗi cụ thể.
- Multidimensional arrays – Mảng đa chiều: Mảng chứa một hoặc nhiều mảng với giá trị được truy cập thông qua nhiều chỉ mục
Mục lục
Indexed arrays/Numberical Array – Mảng số
Các mảng này có thể chứa số, chuỗi hoặc bất kỳ đối tượng nào khác nhưng chỉ mục của chúng được biểu thị bằng số. Index bắt đầu của mảng được đặt thành 0 theo mặc định, và tăng dần 1 đơn vị cho mỗi index tiếp theo.
Ví dụ:
<?php
$fruits = ["apple", "banana", "mango"];
echo $fruits[0]; // Outputs 'apple'
$fruits = array('apple', 'banana', 'orange');
foreach($fruits as $fruit) {
echo 'I eat '.$fruit.' <br/>';
}
Associative Array/ Mảng kết hợp
Về chức năng, mảng kết hợp rất giống với mảng số, nhưng chúng khác nhau về khái niệm index (chỉ mục). Người dùng có thể tạo mối liên kết chặt chẽ giữa khóa và giá trị bằng cách sử dụng mảng kết hợp với chuỗi làm chỉ mục.
Ví dụ:
<?php
// A sample associative array
$myArray = array('join'=> 20 ,'bean'=> 30);
// another way
// $myArray = ['join'=> 20 ,'bean'=> 30];
echo $myArray['join']."<br/>";
echo $myArray['bean']."<br/>";
// output:
// 20
// 30
Với cách tạo mảng trên, chúng ta dùng hàm array hoặc [ ] để khởi tạo mảng. Chúng ta cũng có cách khác để khai báo mảng bằng cách gán phần tử cho mảng từ đầu như ví dụ sau:
$myArr["John"] = "Hello";
$myArr['Roger'] = "abc";
$myArr["Susan'] = "def";
Tuy nhiên không nên sử dụng cách này để khởi tạo mảng vì khi bảo trì dự án dễ bị rối khi dự án trở nên phức tạp.
Multi-dimensional Arrays/ Mảng đa chiều
Mảng đa chiều là mảng mà mỗi phần tử trong mảng chính có thể là một mảng. Mỗi phần tử trong mảng con cũng có thể là một mảng, v.v. Nhiều chỉ mục được sử dụng để truy cập các giá trị trong mảng đa chiều.
Ví dụ:
<?php
$exampleArray = array(
"John" => array(
"age" => 18,
"address" => "123 Street Road, City ST 54321",
"phone" => "XXX-XXX-XXXX"
),
"Roger" => array(
"age" => 30,
"address" => "456 Avenue Circle, City ST 12345",
"phone" => "YYY-YYY-YYYY"
),
"Susan" => array(
"age" => 20,
"address" => "789 Parkway Boulevard, City ST 67890",
"phone" => "ZZZ-ZZZ-ZZZZ"
)
);
Một số hàm sắp xếp mảng
PHP hỗ trợ nhiều hàm dựng sẵn để sắp xếp các phần tử mảng theo nhiều cách khác nhau, chẳng hạn như theo thứ tự bảng chữ cái hoặc số theo thứ tự tăng dần hoặc giảm dần, mục đích các hàm này giúp lập trình viên giảm thiểu thời gian làm việc, không phải suy nghĩ về các thuật toán sắp xếp mảng nữa. Chúng ta hãy xem xét một số hàm phổ biến nhất để sắp xếp mảng như sau:
- sort() và rsort(): sắp xếp các mảng được lập chỉ mục được .
- ksort() và krsort(): sắp xếp các mảng kết hợp theo khóa.
- asort() và arsort(): Chúng được sử dụng để sắp xếp các mảng kết hợp theo giá trị.
Xem thêm tài liệu chính thức: https://www.php.net/manual/en/array.sorting.php
Sắp xếp nâng cao khả năng tìm kiếm đáng kể và cũng hỗ trợ các mẫu tăng hoặc giảm dựa trên mối quan hệ tuyến tính giữa các thành phần dữ liệu. Bảng mô tả danh sách hàm như sau:
Hàm sắp xếp | Mô tả |
sort() | Sắp xếp mảng theo thứ tự tăng dần |
rsort() | Sắp xếp mảng theo thứ tự giảm dần |
asort() | Sắp xếp các mảng kết hợp theo thứ tự tăng dần dựa theo giá trị |
ksort() | Sắp xếp mảng kết hợp theo thứ tự tăng dần, theo khóa (key) |
arsort() | Sắp xếp các mảng kết hợp theo thứ tự giảm dần, theo giá trị |
krsort() | Sắp xếp các mảng kết hợp theo thứ tự giảm dần, theo khóa |
Sắp xếp mảng theo thứ tự tăng dần – sort()
<?php
$Student = array("Peter", "John", "David");
sort($Student);
$Sclength = count($Student);
for($x = 0; $x < $Sclength; $x++) {
echo $Student[$x];
echo "<br>";
}
//output:
//David
//John
//Peter
Sắp xếp mảng theo thứ tự giảm dần – rsort()
<?php
$Student = array("Peter", "John", "David");
rsort($Student);
$Sclength = count($Student);
for($x = 0; $x < $Sclength; $x++) {
echo $Student[$x];
echo "<br>";
}
//output
//Peter
//John
//David
Sắp Xếp Mảng theo thứ tự tăng dần, theo giá trị – asort()
<?php
$ages = array("Peter"=>"60", "John"=>"37", "David"=>"43");
asort($ages);
foreach ($ages as $key => $value) {
echo "Key=" . $key . ", Value=" . $value;
echo "<br>";
}
// output
//Key=John, Value=37
//Key=David, Value=43
//Key=Peter, Value=60
Sắp Xếp Mảng theo thứ tự giảm dần, theo giá trị – arsort()
<?php
$ages = array("Peter"=>"60", "John"=>"37", "David"=>"43");
arsort($ages);
foreach ($ages as $key => $value) {
echo "Key=" . $key . ", Value=" . $value;
echo "<br>";
}
// output
//Key=Peter, Value=60
//Key=David, Value=43
//Key=John, Value=37
Sắp Xếp Mảng theo thứ tự tăng dần, theo Khóa – ksort()
$sage = array("Peter"=>"35", "John"=>"37", "David"=>"43");
ksort($sage);
foreach ($sage as $x => $x_value) {
echo "Key=" . $x . ", Value=" . $x_value;
echo "<br>";
}
// output
//Key=David, Value=43
//Key=John, Value=37
//Key=Peter, Value=35
Sắp Xếp Mảng theo thứ tự giảm dần, theo Khóa – krsort()
$sage = array("Peter"=>"35", "John"=>"37", "David"=>"43");
ksort($sage);
foreach ($sage as $x => $x_value) {
echo "Key=" . $x . ", Value=" . $x_value;
echo "<br>";
}
// output
//Key=Peter, Value=35
//Key=John, Value=37
//Key=David, Value=43
Ngoài ra, các bạn có thể tham khảo thêm các hàm sắp xếp của PHP docs offical để hiểu cách sử dụng của các hàm tương tự, và xem thêm bài viết https://hocvietcode.com/ham-functions-trong-php/ để xem thêm một số hàm nâng cao khi làm việc với mảng trong PHP
Bài tập
Bài1:
In ra bảng QLSV với yêu cầu sau:
- Thông tin sinh viên là một mảng nhiều chiều với thông tin mỗi sinh viê n là một mảng con (associative array)
- Sử dụng vòng lặp để duyệt và in ra html bảng sinh viên
- Khi bấm vào nút thêm SV (sử dụng kiêến thức bài get hoặc post) thêm 1 hàng sinh viên vào cuối bảng.
1 Comments