Định nghĩa và cách sử dụng
Một mảng đa chiều trong PHP có thể được xem như một mảng của các mảng, trong đó mỗi phần tử bên trong mảng là một mảng khác. Các phần tử bên trong của mảng đa chiều có thể là mảng liên hợp (associative) hoặc mảng chỉ số (indexed).
Mặc dù mảng có thể lồng nhau đến bất kỳ cấp độ nào, nhưng mảng hai chiều với nhiều mảng một chiều bên trong mảng ngoài cùng là trường hợp sử dụng thực tế nhất.
Cú pháp
// Mảng hai chiều liên hợp
$twodim = array(
"row1" => array("k1" => "v1", "k2" => "v2", "k3" => "v3"),
"row2" => array("k4" => "v4", "k5" => "v5", "k6" => "v6")
);
// Mảng hai chiều chỉ số
$twodim = array(
array("v1", "v2", "v3"),
array("v4", "v5", "v6")
);
Đối với mảng hai chiều chỉ số, ta có thể truy cập phần tử bằng chỉ số:
$arr[row][column];
Phiên bản PHP
Sử dụng dấu ngoặc vuông [] để gán mảng khả dụng từ PHP 5.4.
Ví dụ
Mảng 2D chỉ số (indexed)
<?php
$arrs = array(
array(1, 2, 3, 4, 5),
array(11, 22, 33, 44, 55),
);
foreach ($arrs as $arr) {
foreach ($arr as $i) {
echo $i . " ";
}
echo "\n";
}
$cols = count($arrs[0]);
$rows = count($arrs);
for ($i = 0; $i < $rows; $i++) {
for ($j = 0; $j < $cols; $j++) {
echo $arrs[$i][$j] . " ";
}
echo "\n";
}
?>
Kết quả
1 2 3 4 5 11 22 33 44 55 1 2 3 4 5 11 22 33 44 55
Mảng 2D chỉ số với các mảng liên hợp bên trong
<?php
$arrs = array(
array(1 => 100, 2 => 200, 3 => 300),
array(1 => 'aa', 2 => 'bb', 3 => 'cc'),
);
foreach ($arrs as $arr) {
foreach ($arr as $i => $j) {
echo $i . "->" . $j . " ";
}
echo "\n";
}
for ($row = 0; $row < count($arrs); $row++) {
foreach ($arrs[$row] as $i => $j) {
echo $i . "->" . $j . " ";
}
echo "\n";
}
?>
Kết quả
1->100 2->200 3->300 1->aa 2->bb 3->cc 1->100 2->200 3->300 1->aa 2->bb 3->cc
Mảng hai chiều liên hợp
<?php
$arr1 = array("rno" => 11, "marks" => 50);
$arr2 = array("rno" => 22, "marks" => 60);
$arrs = array(
"Manav" => $arr1,
"Ravi" => $arr2
);
foreach ($arrs as $key => $val) {
echo "name: " . $key . " ";
foreach ($val as $i => $j) {
echo $i . "->" . $j . " ";
}
echo "\n";
}
?>
Kết quả
name: Manav rno->11 marks->50 name: Ravi rno->22 marks->60
Mảng liên hợp với giá trị là mảng chỉ số
<?php
$arr1 = array("PHP", "Java", "Python");
$arr2 = array("Oracle", "MySQL", "SQLite");
$arrs = array(
"Langs" => $arr1,
"DB" => $arr2
);
foreach ($arrs as $key => $val) {
echo $key . ": ";
for ($i = 0; $i < count($val); $i++) {
echo $val[$i] . " ";
}
echo "\n";
}
?>
Kết quả
Langs: PHP Java Python DB: Oracle MySQL SQLite