Mảng nhiều chiều (multidimensional array) là một mảng bao gồm 1 hoặc nhiều mảng khác. PHP hỗ trợ mảng 2, 3, 4, 5 chiều hoặc có số chiều nhiều hơn nữa. Tuy nhiên, mảng có hơn 3 chiều rất khó quản lý và truy xuất dữ liệu. Trong bài này, chúng ta sẽ chỉ tập trung tìm hiểu mảng 2 và 3 chiều trong PHP.
Để học tốt bài này, các bạn cần đọc lại bài Cài đặt môi trường lập trình Web PHP với XAMPP để biết cách chạy ứng dụng web PHP với XAMPP.
1. Mảng 2 chiều (2 dimensional array) trong PHP
Mảng 2 chiều là mảng của mảng. Mảng 2 chiều có thể lưu trữ các phần tử có bất kỳ kiểu dữ liệu nào. Mảng 2 chiều được tổ chức như một bảng gồm các dòng và cột. Để truy xuất các phần tử trong mảng, chúng ta phải chỉ định rõ chỉ số dòng và chỉ số cột.
Ví dụ, chúng ta có dữ liệu về xe ôtô như bên dưới:Name Stock Sold Name Stock Sold Volvo 22 18 BMW 15 13 Saab 5 2
Chúng ta có thể sử dụng mảng 2 chiều để lưu trữ dữ liệu của bảng trên như sau:
$cars = array (
array("Volvo",22,18),
array("BMW",15,13),
array("Saab",5,2),
array("Land Rover",17,15)
);
Mảng 2 chiều $cars lữu trữ 4 mảng tương ứng 4 dòng và mỗi dòng này lưu trữ 3 cột giá trị là name, stock, sold. Để truy cập vào các phần tử của mảng $cars, chúng ta phải chỉ định rõ chỉ số hàng và cột:
<?php
$cars = array (
array("Volvo",22,18),
array("BMW",15,13),
array("Saab",5,2),
array("Land Rover",17,15)
);
echo $cars[0][0].": In stock: ".$cars[0][1].", sold: ".$cars[0][2].".<br>";
echo $cars[1][0].": In stock: ".$cars[1][1].", sold: ".$cars[1][2].".<br>";
echo $cars[2][0].": In stock: ".$cars[2][1].", sold: ".$cars[2][2].".<br>";
echo $cars[3][0].": In stock: ".$cars[3][1].", sold: ".$cars[3][2].".<br>";
?>
Chúng ta có thể sử dụng 2 vòng lặp for để truy xuất các phần tử trong mảng 2 chiều:
<?php
$cars = array (
array("Volvo",22,18),
array("BMW",15,13),
array("Saab",5,2),
array("Land Rover",17,15)
);
for ($row = 0; $row < 4; $row++) {
echo "Row number $row: ";
for ($col = 0; $col < 3; $col++) {
echo $cars[$row][$col]." ";
}
echo "<br>";
}
?>
Kết quả
Row number 0: Volvo 22 18
Row number 1: BMW 15 13
Row number 2: Saab 5 2
Row number 3: Land Rover 17 15
2. Mảng 2 chiều kết hợp (2 dimensional associative array) trong PHP
Mảng 2 chiều kết hợp (2 dimensional associative array) cũng giống như mảng 2 chiều bình thường. Nhưng các phần tử được gán bằng một key nào đó, key có thể là số (number) hoặc chuỗi (string).
$marks = array(
"Son" => array(
"Math" => 5.5,
"English" => 8.5,
"Physics" => 7.4,
),
"Kane" => array(
"Math" => 7.8,
"English" => 9.8,
"Physics" => 4.6,
),
"John" => array(
"Math" => 8.8,
"English" => 4.6,
"Physics" => 9.9,
),
);
3. Mảng 3 chiều (3 dimensional array) trong PHP
Mảng 3 chiều là một mảng của mảng của mảng. Cách tạo mảng 3 chiều giống với mảng 2 nhiều. Nhưng mỗi phần tử trong mảng 2 chiều bây giờ là một mảng khác.
<?php
$numberarr = array(
array(
array(1, 2),
array(3, 4),
),
array(
array(5, 6),
array(7, 8),
),
);
print "<pre>";
print_r($numberarr);
print "</pre>";
?>
Kết quả
Array
(
[0] => Array
(
[0] => Array
(
[0] => 1
[1] => 2
)
[1] => Array
(
[0] => 3
[1] => 4
)
)
[1] => Array
(
[0] => Array
(
[0] => 5
[1] => 6
)
[1] => Array
(
[0] => 7
[1] => 8
)
)
)
Chương trình xuất các phần tử của mảng 3 chiều trong PHP
<?php
$numarr = array(
array(
array(1, 2),
array(3, 4),
array(7, 10),
),
array(
array(5, 6),
array(7, 8),
array(15, 21),
),
);
for ($i=0; $i < count($numarr); $i++) {
for ($j=0; $j < count($numarr[$i]); $j++) {
for ($k=0; $k < count($numarr[$i][$j]); $k++) {
echo "$"."numarr[$i][$j][$k]: ".$numarr[$i][$j][$k];
echo "<br>";
}
echo "<br>";
}
}
?>
Kết quả
$numarr[0][0][0]: 1
$numarr[0][0][1]: 2
$numarr[0][1][0]: 3
$numarr[0][1][1]: 4
$numarr[0][2][0]: 7
$numarr[0][2][1]: 10
$numarr[1][0][0]: 5
$numarr[1][0][1]: 6
$numarr[1][1][0]: 7
$numarr[1][1][1]: 8
$numarr[1][2][0]: 15
$numarr[1][2][1]: 21
Để truy xuất một phần tử trong mảng 3 chiều, chúng ta cần chỉ định rõ 3 chỉ số chiều. Ví dụ, truy xuất phần tử đầu tiên trong mảng 3 chiều $numarr
thì sử dụng $numarr[0][0][0]
.