Kỹ thuật lập trình PHP Lập trình PHP

Bài 7: Mảng trong PHP

I. Khái niệm

a. Mảng là gì?

Mảng là một kiểu dữ liệu đặc biệt có thể chứa một hoặc nhiều giá trị cùng một lúc. Có thể hiểu mảng là một danh sách các phần tử nằm liền kề nhau trong bộ nhớ. Người ta thường dùng chỉ số để chỉ đến một phần tử trong mảng, bắt đầu từ 0.

Ví dụ: Mảng tên các hãng xe: $hangxe và chỉ số tương ứng của các phần tử

Honda       Yamaha      Suzuki      Piaggo      Sym
$hangxe[0]  $hangxe[1]  $hangxe[2]  $hangxe[3]  $hangxe[4]

b. Mảng trong PHP

Mảng trong PHP không giống như mảng trong các ngôn ngữ khác như C# hay Java là phải khai báo kiểu dữ liệu, số phần tử, các phần tử giống nhau về kiểu dữ liệu. Đó là một điều dễ nhầm lẫn của mảng trong PHP.

Mảng trong PHP là một tập hợp các giá trị được lưu trữ trong một biến duy nhất, không cần phải quan tâm đến kiểu dữ liệu và kích thước của mảng.

Ví dụ:

<?php
$colors = array(‘red’, ‘green’, ‘blue’);
?>

II. Tạo mảng

Để tạo mảng, PHP cung cấp sẵn hàm array();

Trong PHP có 3 loại mảng:

  • Mảng chỉ số: sử dụng chỉ số để chỉ đến các phần tử trong mảng.
  • Mảng kết hợp: sử dụng khóa để chỉ đến các phần tử trong mảng.
  • Mảng đa chiều: mỗi phần tử của mảng là một mảng.

a. Mảng chỉ số

Có hai cách để tạo một mảng chỉ số:

Cách 1: dùng hàm array(); chỉ số sẽ được gán tự động từ 0. Ví dụ:

<?php
$colors = array(‘red’, ‘green’, ‘blue’);
?>

Cách 2: gán chỉ số bằng tay. Ví dụ:

<?php
$colors[0] = ‘red’;
$colors[1] = ‘green’;
$colors[2] = ‘blue’;
?>

Để lấy giá trị của phần tử nào đó trong mảng chỉ số, chỉ cần gọi biến tên mảng kèm chỉ số trong cặp dấu [<chỉ số>].

Ví dụ:

<?php
$colors = array(‘red’, ‘green’, ‘blue’);
echo “My first color is ” . $colors[0] . “<br />”;
echo “My second color is ” . $colors[1] . “<br />”;
echo “My third color is ” . $colors[2] . “<br />”;
?>

Hình 45 Kết quả truy xuất mảng chỉ số

b. Kích thước của mảng chỉ số và duyệt mảng

Để lấy kích thước của mảng sử dụng hàm count($mang); trả về một số nguyên là số phần tử trong mảng.

Ví dụ:

<?php
$colors = array(‘red’, ‘green’, ‘blue’);
echo count($colors); // Kết quả 3
?>

Để duyệt mảng, sử dụng câu lệnh lặp for như sau:

<?php
$colors = array(‘red’, ‘green’, ‘blue’);
$length = count($colors);

for($i = 0; $i < $length; $i++) {
echo “Color $i is ” . $colors[$i] . “<br />”;
}
?>

Hình 46 Kết quả duyệt mảng bằng câu lệnh lặp for

c. Mảng kết hợp

Mảng kết hợp trong PHP sử dụng một khóa (key) để đặt tên cho một giá trị tương ứng. Có hai cách để tạo mảng kết hợp.

Cách 1 sử dụng hàm array(); Ví dụ:

<?php
$colors = array(‘red’ => ‘#f00’,
‘green’ => ‘#0f0’,
‘blue’ => ‘#00f’);
?>

Ở ví dụ trên các từ khóa là ‘red’, ‘green’, ‘blue’ tương ứng với các giá trị là mã màu.

Cách 2 tương tự như mảng chỉ số. Ví dụ:

<?php
$colors[‘red’] = ‘#f00’;
$colors[‘green’] = ‘#0f0’;
$colors[‘blue’] = ‘#00f’;
?>

Ở cách 2 này tương tự như việc khai báo và gán giá trị cho biến. Tuy nhiên khóa cần phải rõ ràng và không được trùng nhau.

d. Duyệt mảng kết hợp bằng foreach

Mảng kết hợp khác mảng chỉ số là không thể sử dụng chỉ số index để trỏ đến phần tử tương ứng mà phải sử dụng khóa (key). Do đó phải sử dụng câu lệnh lặp foreach đã học để duyệt mảng kết hợp. Ví dụ:

<?php
$colors = array(‘red’ => ‘#f00’,
‘green’ => ‘#0f0’,
‘blue’ => ‘#00f’);

foreach($colors as $key => $value) {
echo “Color $key is $value<br />”;
}
?>

Hình 47 Kết quả thực thi lệnh lặp foreach duyệt mảng kết hợp

e. Mảng đa chiều

Mảng đa chiều là mảng mà các phần tử là một mảng khác. Mảng đa chiều có thể là mảng hai, ba hoặc n chiều. Mảng hai chiều có thể hình dung như một bảng dữ liệu gồm có dòng là các phần tử, mỗi dòng là một mảng một chiều. Đối với mảng từ ba chiều trở lên thường khó hình dung hơn mảng hai chiều.

Ví dụ về mảng hai chiều được mô phỏng theo bảng sau đây:

Mã số   Họ tên           Địa chỉ
SV01    Pham Hong Phuoc  TP.HCM
SV02    Ly Hai           Tien Giang
SV03    Hai Bang         TP.HCM

Dữ liệu bảng trên được thể hiện bằng mảng hai chiều $thongtinsinhvien như sau:

<?php
$thongtinsinhvien =
array(
array(‘SV01’, ‘Pham Hong Phuoc’, ‘TP.HCM’),
array(‘SV02’, ‘Ly Hai’, ‘Tien Giang’),
array(‘SV03’, ‘Hai Bang’, ‘TP.HCM’)
);
?>

f. Duyệt mảng đa chiều bằng câu lệnh for:

Để duyệt mảng đa chiều chúng ta cần hai vòng lặp for. Vòng lặp đầu tiên để duyệt đến các phần tử i của mảng hai chiều. Vòng lặp thứ hai duyệt đến từng phần tử con của phần tử i. Có thể hiểu như sau khi mô phỏng mảng hai chiều là một bảng dữ liệu:

  • Vòng lặp đầu tiên duyệt lần lượt các dòng trong bảng.
  • Với mỗi dòng, dùng vòng lặp thứ hai để duyệt lần lượt từng ô.

Ví dụ:

<?php
$thongtinsinhvien =
array(
array(‘SV01’, ‘Pham Hong Phuoc’, ‘TP.HCM’),
array(‘SV02’, ‘Ly Hai’, ‘Tien Giang’),
array(‘SV03’, ‘Hai Bang’, ‘TP.HCM’)
);

$length = count($thongtinsinhvien);
for($i = 0; $i < $length; $i++) {
$_length = count($thongtinsinhvien[$i]);
for($j = 0; $j < $_length; $j++) {
echo $thongtinsinhvien[$i][$j] . ” – “;
}
echo “<br />”;
}
?>

Hình 48 Duyệt mảng hai chiều sử dụng câu lệnh for