Menu

Mảng trong PHP: tạo, truy cập, duyệt và in mảng

Mảng trong PHP là một danh sách có thứ tự, mỗi giá trị nằm dưới một khóa: $fruits = ['apple', 'banana']; đọc phần tử bằng $fruits[0]. Tìm hiểu cách tạo mảng, đọc và sửa phần tử, duyệt mảng, in mảng và nên chọn hàm mảng nào.

Trang này có trình soạn thảo chạy trực tiếp. Sửa, chạy và xem đầu ra ngay lập tức.

Mảng (array) trong PHP lưu một danh sách giá trị dưới các khóa. Tạo mảng bằng dấu ngoặc vuông, $fruits = ['apple', 'banana', 'cherry'];, và đọc một phần tử theo chỉ số của nó, $fruits[0]. Chỉ số bắt đầu từ 0, còn count($fruits) cho biết số phần tử.

Mọi mảng PHP đều là một ánh xạ có thứ tự: mỗi giá trị nằm dưới một khóa. Khi bạn không tự chọn khóa, PHP đánh số chúng 0, 1, 2... và bạn có một mảng chỉ số. Khi bạn tự chọn (['name' => 'Ada']), bạn có một mảng kết hợp. Cả hai đều là cùng một kiểu array.

Tạo mảng

Dấu ngoặc vuông là cú pháp thường dùng. array() là cách viết cũ và cho ra kết quả y hệt. range() tạo một dãy số hoặc chữ cái, còn array_fill() lặp lại một giá trị.

Một mảng PHP có thể chứa đồng thời các giá trị thuộc nhiều kiểu khác nhau, kể cả các mảng khác. Mảng chứa mảng là mảng nhiều chiều, cách thông dụng để lưu các hàng dữ liệu.

Lấy phần tử đầu và cuối

PHP không có chỉ số âm. $arr[-1] không có nghĩa là "phần tử cuối": nó tra một khóa tên là -1, và khi không có khóa đó, PHP in ra Warning: Undefined array key -1. Hãy dùng array_key_first() và array_key_last(), hai hàm này vẫn đúng khi khóa không bắt đầu từ 0.

end($queue) cũng trả về giá trị cuối, nhưng nó di chuyển con trỏ nội bộ của mảng như một tác dụng phụ, nên cách dựa vào khóa rõ ràng hơn.

In mảng

echo $arr không dùng được: nó in ra chữ Array kèm một cảnh báo. Chọn cách in phù hợp với việc bạn cần:

  • print_r($arr) để xem nội dung dễ đọc khi gỡ lỗi.
  • var_dump($arr) để thấy thêm kiểu và độ dài của từng giá trị.
  • implode(', ', $arr) để ghép các giá trị thành một chuỗi để hiển thị.
  • json_encode($arr) để gửi mảng sang JavaScript hoặc một API.

Trang print_r và var_dump trình bày các tùy chọn định dạng, kể cả cách in mảng bên trong HTML.

Duyệt mảng

foreach là vòng lặp (loop) sinh ra cho mảng: nó đưa cho bạn từng giá trị, và cả khóa nếu bạn cần. Vòng lặp for với chỉ số cũng dùng được cho mảng chỉ số có khóa chạy liền mạch từ 0.

Mảng được sao chép, không dùng chung

Gán mảng cho một biến khác, hoặc truyền nó vào một hàm, sẽ tạo ra một bản sao. Sửa bản sao không làm ảnh hưởng mảng gốc. Thêm & vào tham số khi một hàm cần sửa mảng của nơi gọi.

Hàm mảng theo từng việc

PHP có hơn 70 hàm xử lý mảng. Đây là những hàm bạn sẽ dùng nhiều nhất, mỗi hàm có trang riêng:

Việc cần làmHàm
Thêm vào cuốiarray_push() hoặc $arr[] =
Số phần tửcount()
Kiểm tra một giá trị có tồn tạiin_array()
Tìm khóa của một giá trịarray_search()
Kiểm tra một khóa có tồn tạiarray_key_exists()
Gộp mảngarray_merge()
Biến đổi mọi giá trịarray_map()
Giữ lại một số giá trịarray_filter()
Sắp xếpsort(), usort() và các hàm cùng họ
Xóa một phần tửunset(), array_splice()
Lấy một phầnarray_slice()
Xóa trùng lặparray_unique()
Chuỗi thành mảng và ngược lạiexplode(), implode()

Những khóa âm thầm gộp vào nhau

Khóa mảng chỉ có thể là số nguyên hoặc chuỗi, và PHP tự chuyển đổi một số khóa. Một chuỗi trông giống số nguyên thập phân, như "1", sẽ thành số nguyên 1, nên $a["1"] và $a[1] là cùng một ô. "01" và "1.5" vẫn là chuỗi. Đây là lý do một mảng tạo từ dữ liệu biểu mẫu hoặc tệp CSV có thể ít phần tử hơn bạn nghĩ.

Câu hỏi thường gặp

Làm sao tạo mảng trong PHP?

Dùng dấu ngoặc vuông: $colors = ['red', 'green', 'blue'];. Mảng rỗng là $items = [];. Cú pháp cũ array('red', 'green') làm điều tương tự và vẫn dùng được.

Làm sao in mảng trong PHP?

echo không in được mảng (nó in ra chữ Array kèm một cảnh báo). Dùng print_r($arr) để xem nội dung dễ đọc, var_dump($arr) để thấy cả kiểu dữ liệu, hoặc echo implode(', ', $arr) để in các giá trị trên một dòng.

Làm sao lấy phần tử cuối cùng của mảng trong PHP?

Dùng $arr[array_key_last($arr)] (PHP 7.3 trở lên) hoặc end($arr). PHP không có chỉ số âm: $arr[-1] tìm một khóa tên là -1, mà khóa này thường không tồn tại.

Mảng PHP được truyền theo giá trị hay theo tham chiếu?

Theo giá trị. $b = $a; cho $b một bản sao riêng, nên sửa $b không làm thay đổi $a. Để sửa mảng của nơi gọi bên trong một hàm, khai báo tham số là tham chiếu: function add(array &$list).

Mảng chỉ số và mảng kết hợp trong PHP khác nhau thế nào?

Chúng là cùng một kiểu. Mảng chỉ số có các khóa số nguyên 0, 1, 2... do PHP tự gán; mảng kết hợp dùng khóa do bạn chọn, thường là chuỗi như 'name'. Một mảng thậm chí có thể dùng cả hai loại khóa.

Hình minh họa các ngôn ngữ lập trình của Coddy

Học lập trình cùng Coddy

Bắt đầu