Mảng kết hợp 2 chiều
Thuộc phần Logic và luồng chương trình trong hành trình PHP của Coddy. Bài học 31 trên 68.
Khi làm việc với mảng 2D bằng chỉ số số học, bạn cũng có thể tạo dữ liệu có cấu trúc hơn bằng cách dùng mảng kết hợp ở cả cấp chính lẫn bên trong các mảng lồng nhau. Cách này dùng khóa dạng chuỗi thay vì số, giúp dữ liệu mô tả rõ hơn và dễ hiểu hơn.
Đây là cách tạo một mảng kết hợp 2D, trong đó mỗi phần tử có khóa chuỗi mang ý nghĩa:
<?php
$students = [
"alice" => [
"name" => "Alice Johnson",
"grade" => 92
],
"bob" => [
"name" => "Bob Smith",
"grade" => 87
],
"charlie" => [
"name" => "Charlie Brown",
"grade" => 95
]
];
?>Bạn cũng có thể kết hợp các cách làm, dùng chỉ số số học cho mảng chính và giữ các mảng kết hợp bên trong:
<?php
$users = [
["username" => "john_doe", "email" => "john@example.com"],
["username" => "jane_smith", "email" => "jane@example.com"]
];
?>Cấu trúc này rất hữu ích để sắp xếp dữ liệu phức tạp như hồ sơ người dùng, danh mục sản phẩm hoặc bất kỳ trường hợp nào bạn cần lưu trữ nhiều thuộc tính liên quan cho mỗi mục. Các khóa dạng chuỗi giúp code tự mô tả và dễ bảo trì hơn nhiều so với việc phải nhớ các vị trí bằng số.
Thử thách
DễBạn sẽ nhận một đầu vào: một mảng kết hợp 2D biểu thị kho sản phẩm ở định dạng JSON. Mỗi sản phẩm có một ID sản phẩm duy nhất làm khóa, còn giá trị là một mảng kết hợp chứa "name" và "price" của sản phẩm. Đọc đầu vào, chuyển chuỗi JSON thành mảng kết hợp 2D, duyệt qua tất cả sản phẩm và in thông tin của từng sản phẩm theo định dạng: ID: [product_id] - Name: [name] - Price: $[price]
Mỗi sản phẩm cần được in trên một dòng riêng.
Định dạng đầu vào: Một dòng chứa đối tượng JSON biểu thị kho sản phẩm (ví dụ: {"P001":{"name":"Laptop","price":999.99},"P002":{"name":"Mouse","price":25.50},"P003":{"name":"Keyboard","price":75.00}})
Đầu ra mong đợi: Mỗi sản phẩm được in trên một dòng riêng theo định dạng ID: [product_id] - Name: [name] - Price: $[price]
Tự làm thử
<?php
// Đọc đầu vào JSON
$input = fgets(STDIN);
// Chuyển JSON thành mảng kết hợp
$inventory = (array)json_decode($input, true);
// TODO: Viết code bên dưới để duyệt qua inventory và in ra từng sản phẩm
?>Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Logic và luồng chương trình
1Hàm nâng cao
Hàm ẩn danhClosure và 'use'Hàm mũi tênHàm callbackDùng 'call_user_func'Hàm biếnTruyền tham chiếuHàm đệ quyÔn tập: tổng hợp về hàm4Mảng đa chiều
Tạo mảng 2 chiềuTruy cập phần tử trong mảng 2 chiềuChỉnh sửa phần tử trong mảng 2 chiềuLặp qua các vòng lặp lồng nhauMảng kết hợp 2 chiềuÔn tập: bài tập lưới đơn giản2Thao tác nâng cao với mảng
Thêm phần tử bằng 'array_push'Xóa phần tử bằng 'array_pop'Thêm phần tử vào đầu mảng bằng 'array_unshift'Xóa phần tử đầu mảng bằng 'array_shift'Gộp các mảng được đánh chỉ sốGộp các mảng kết hợpTrích xuất phần tử bằng 'array_slice'Kiểm tra giá trị bằng 'in_array'Tìm khóa bằng 'array_search'Ôn tập: bài tập về danh sách phát3Sắp xếp mảng
Sắp xếp mảng có chỉ số tăng dầnSắp xếp mảng có chỉ số giảm dầnSắp xếp mảng kết hợp theo giá trịSắp xếp mảng kết hợp theo khóaSắp xếp theo thứ tự tự nhiênSắp xếp tùy chỉnh bằng 'usort'Ôn tập: Sắp xếp bảng xếp hạngTự luyện tập: Trình biên dịch PHP online