Mảng là trái tim của việc quản lý dữ liệu trong PHP, cho phép bạn tổ chức nhiều giá trị một cách có hệ thống. Từ mảng chỉ mục đơn giản, dễ truy cập bằng số, đến mảng kết hợp linh hoạt với các khóa ý nghĩa, và cả mảng đa chiều phức tạp để biểu diễn dữ liệu cấu trúc. Bài viết này sẽ hướng dẫn bạn khám phá từng loại mảng và các hàm xử lý mảng thiết yếu, giúp bạn thao tác, sắp xếp và lọc dữ liệu hiệu quả, từ đó tối ưu hóa mọi ứng dụng web PHP.
Mảng (Array) là một trong những cấu trúc dữ liệu mạnh mẽ và được sử dụng rộng rãi nhất trong PHP. Chúng cho phép bạn lưu trữ nhiều giá trị trong một biến duy nhất, giúp tổ chức và quản lý dữ liệu một cách hiệu quả. Bài viết này sẽ đi sâu vào các loại mảng phổ biến trong PHP: mảng chỉ mục, mảng kết hợp, mảng đa chiều, cùng với các hàm xử lý mảng thiết yếu, giúp bạn nắm vững kiến thức và tối ưu hóa mã nguồn PHP của mình.
Mảng chỉ mục (hay còn gọi là mảng số) là loại mảng cơ bản nhất trong PHP. Các phần tử trong mảng được truy cập thông qua một chỉ số số nguyên, bắt đầu từ 0.
Bạn có thể định nghĩa mảng chỉ mục theo hai cách:
<?php
// Cách 1: Sử dụng array()
$fruits = array("Apple", "Banana", "Orange");
// Cách 2: Sử dụng cú pháp dấu ngoặc vuông [] (PHP 5.4+)
$colors = ["Red", "Green", "Blue"];
?>
Để truy cập một phần tử, bạn sử dụng tên mảng và chỉ số của phần tử đó trong dấu ngoặc vuông:
<?php
echo $fruits[0]; // Output: Apple
echo $colors[1]; // Output: Green
?>
Bạn có thể thêm phần tử mới vào cuối mảng hoặc cập nhật giá trị của một phần tử hiện có:
<?php
$fruits[] = "Grape"; // Thêm "Grape" vào cuối mảng
$fruits[1] = "Mango"; // Cập nhật phần tử thứ 2 thành "Mango"
print_r($fruits);
/*
Output:
Array
(
[0] => Apple
[1] => Mango
[2] => Orange
[3] => Grape
)
*/
?>
Mảng kết hợp sử dụng các khóa (keys) dạng chuỗi thay vì chỉ số số nguyên để truy cập các phần tử. Điều này giúp bạn đặt tên cho các phần tử một cách có ý nghĩa hơn, đặc biệt hữu ích khi bạn muốn lưu trữ dữ liệu theo cặp khóa-giá trị (key-value pairs).
<?php
// Cách 1: Sử dụng array()
$person = array(
"name" => "John Doe",
"age" => 30,
"city" => "New York"
);
// Cách 2: Sử dụng cú pháp dấu ngoặc vuông [] (PHP 5.4+)
$product = [
"id" => 101,
"name" => "Laptop",
"price" => 1200
];
?>
Bạn truy cập các phần tử bằng cách sử dụng tên mảng và khóa trong dấu ngoặc vuông:
<?php
echo $person["name"]; // Output: John Doe
echo $product["price"]; // Output: 1200
?>
<?php
$person["email"] = "john.doe@example.com"; // Thêm phần tử mới
$product["price"] = 1150; // Cập nhật giá trị
print_r($person);
/*
Output:
Array
(
[name] => John Doe
[age] => 30
[city] => New York
[email] => john.doe@example.com
)
*/
?>
Mảng đa chiều là mảng chứa một hoặc nhiều mảng khác bên trong. Chúng rất hữu ích khi bạn cần lưu trữ dữ liệu có cấu trúc phức tạp, chẳng hạn như bảng dữ liệu hoặc danh sách các đối tượng.
<?php
$students = [
[
"name" => "Alice",
"age" => 20,
"grades" => ["Math" => 90, "Physics" => 85]
],
[
"name" => "Bob",
"age" => 22,
"grades" => ["Math" => 75, "Chemistry" => 80]
]
];
?>
Bạn truy cập các phần tử bằng cách sử dụng nhiều cặp dấu ngoặc vuông, mỗi cặp đại diện cho một chiều của mảng:
<?php
echo $students[0]["name"]; // Output: Alice
echo $students[1]["grades"]["Chemistry"]; // Output: 80
?>
<?php
$students[0]["age"] = 21; // Cập nhật tuổi của Alice
// Thêm một sinh viên mới
$students[] = [
"name" => "Carol",
"age" => 19,
"grades" => ["Biology" => 92, "Art" => 88]
];
print_r($students);
?>
PHP cung cấp một thư viện phong phú các hàm tích hợp sẵn để thao tác và xử lý mảng. Dưới đây là một số hàm quan trọng và thường được sử dụng:
foreach
loop: Cách phổ biến và hiệu quả nhất để duyệt qua các phần tử của mảng.
<?php
$numbers = [10, 20, 30, 40, 50];
foreach ($numbers as $value) {
echo $value . " "; // Output: 10 20 30 40 50
}
foreach ($person as $key => $value) {
echo $key . ": " . $value . "\n";
}
/*
Output:
name: John Doe
age: 30
city: New York
email: john.doe@example.com
*/
?>
is_array()
: Kiểm tra xem một biến có phải là mảng hay không.
<?php
$data = [1, 2, 3];
if (is_array($data)) {
echo "data is an array.";
}
?>
in_array()
: Kiểm tra xem một giá trị có tồn tại trong mảng hay không.
<?php
$fruits = ["Apple", "Banana", "Orange"];
if (in_array("Banana", $fruits)) {
echo "Banana is in the array.";
}
?>
array_key_exists()
: Kiểm tra xem một khóa có tồn tại trong mảng hay không.
<?php
$person = ["name" => "Alice", "age" => 25];
if (array_key_exists("name", $person)) {
echo "Key 'name' exists.";
}
?>
array_push()
: Thêm một hoặc nhiều phần tử vào cuối mảng.
<?php
$colors = ["Red", "Green"];
array_push($colors, "Blue", "Yellow");
print_r($colors); // Output: Array ( [0] => Red [1] => Green [2] => Blue [3] => Yellow )
?>
array_pop()
: Xóa và trả về phần tử cuối cùng của mảng.
<?php
$colors = ["Red", "Green", "Blue"];
$lastColor = array_pop($colors);
echo $lastColor; // Output: Blue
print_r($colors); // Output: Array ( [0] => Red [1] => Green )
?>
array_unshift()
: Thêm một hoặc nhiều phần tử vào đầu mảng.
<?php
$colors = ["Green", "Blue"];
array_unshift($colors, "Red", "Yellow");
print_r($colors); // Output: Array ( [0] => Red [1] => Yellow [2] => Green [3] => Blue )
?>
array_shift()
: Xóa và trả về phần tử đầu tiên của mảng.
<?php
$colors = ["Red", "Green", "Blue"];
$firstColor = array_shift($colors);
echo $firstColor; // Output: Red
print_r($colors); // Output: Array ( [0] => Green [1] => Blue )
?>
unset()
: Xóa một phần tử cụ thể khỏi mảng (lưu ý: hàm này không sắp xếp lại các chỉ số số).
<?php
$fruits = ["Apple", "Banana", "Orange"];
unset($fruits[1]); // Xóa "Banana"
print_r($fruits); // Output: Array ( [0] => Apple [2] => Orange )
?>
PHP cung cấp nhiều hàm để sắp xếp mảng:
sort()
: Sắp xếp mảng chỉ mục theo giá trị tăng dần.
<?php
$numbers = [4, 2, 8, 1, 5];
sort($numbers);
print_r($numbers); // Output: Array ( [0] => 1 [1] => 2 [2] => 4 [3] => 5 [4] => 8 )
?>
rsort()
: Sắp xếp mảng chỉ mục theo giá trị giảm dần.
<?php
$numbers = [4, 2, 8, 1, 5];
rsort($numbers);
print_r($numbers); // Output: Array ( [0] => 8 [1] => 5 [2] => 4 [3] => 2 [4] => 1 )
?>
asort()
: Sắp xếp mảng kết hợp theo giá trị tăng dần, giữ nguyên các khóa.
<?php
$age = ["Peter" => "35", "Ben" => "37", "Joe" => "43"];
asort($age);
print_r($age);
/*
Output:
Array
(
[Peter] => 35
[Ben] => 37
[Joe] => 43
)
*/
?>
arsort()
: Sắp xếp mảng kết hợp theo giá trị giảm dần, giữ nguyên các khóa.
<?php
$age = ["Peter" => "35", "Ben" => "37", "Joe" => "43"];
arsort($age);
print_r($age);
/*
Output:
Array
(
[Joe] => 43
[Ben] => 37
[Peter] => 35
)
*/
?>
ksort()
: Sắp xếp mảng kết hợp theo khóa tăng dần.
<?php
$age = ["Peter" => "35", "Ben" => "37", "Joe" => "43"];
ksort($age);
print_r($age);
/*
Output:
Array
(
[Ben] => 37
[Joe] => 43
[Peter] => 35
)
*/
?>
krsort()
: Sắp xếp mảng kết hợp theo khóa giảm dần.
<?php
$age = ["Peter" => "35", "Ben" => "37", "Joe" => "43"];
krsort($age);
print_r($age);
/*
Output:
Array
(
[Peter] => 35
[Joe] => 43
[Ben] => 37
)
*/
?>
count()
/ sizeof()
: Đếm số lượng phần tử trong mảng.
<?php
$fruits = ["Apple", "Banana", "Orange"];
echo count($fruits); // Output: 3
?>
array_values()
: Trả về tất cả các giá trị của mảng chỉ mục.
<?php
$person = ["name" => "John", "age" => 30];
$values = array_values($person);
print_r($values); // Output: Array ( [0] => John [1] => 30 )
?>
array_keys()
: Trả về tất cả các khóa của mảng.
<?php
$person = ["name" => "John", "age" => 30];
$keys = array_keys($person);
print_r($keys); // Output: Array ( [0] => name [1] => age )
?>
array_merge()
: Kết hợp hai hoặc nhiều mảng thành một.
<?php
$array1 = ["a", "b"];
$array2 = ["c", "d"];
$merged = array_merge($array1, $array2);
print_r($merged); // Output: Array ( [0] => a [1] => b [2] => c [3] => d )
?>
array_unique()
: Loại bỏ các giá trị trùng lặp trong mảng.
<?php
$numbers = [1, 2, 2, 3, 4, 4, 5];
$unique = array_unique($numbers);
print_r($unique); // Output: Array ( [0] => 1 [1] => 2 [3] => 3 [5] => 4 [6] => 5 )
?>
array_filter()
: Lọc các phần tử của mảng bằng cách sử dụng một hàm callback.
<?php
$numbers = [1, 2, 3, 4, 5, 6];
$evenNumbers = array_filter($numbers, function($num) {
return $num % 2 == 0;
});
print_r($evenNumbers); // Output: Array ( [1] => 2 [3] => 4 [5] => 6 )
?>
array_map()
: Áp dụng một hàm callback cho mỗi phần tử của mảng.
<?php
$numbers = [1, 2, 3, 4];
$squaredNumbers = array_map(function($num) {
return $num * $num;
}, $numbers);
print_r($squaredNumbers); // Output: Array ( [0] => 1 [1] => 4 [2] => 9 [3] => 16 )
?>
Mảng là một phần không thể thiếu trong lập trình PHP, giúp bạn lưu trữ và thao tác với dữ liệu một cách linh hoạt và có tổ chức. Nắm vững ba loại mảng chính (chỉ mục, kết hợp, đa chiều) và các hàm xử lý mảng cơ bản là chìa khóa để viết mã PHP hiệu quả và mạnh mẽ. Bằng cách áp dụng đúng loại mảng và sử dụng các hàm thích hợp, bạn có thể giải quyết nhiều vấn đề phức tạp trong phát triển web PHP. Hãy thực hành thường xuyên để thành thạo các khái niệm này!