Gộp các mảng kết hợp
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 15 trên 68.
Mặc dù array_merge() hoạt động trơn tru với các mảng có chỉ số, cách hoạt động của hàm này thay đổi đáng kể khi làm việc với các mảng kết hợp. Điểm khác biệt chính nằm ở cách hàm xử lý các khóa chuỗi trùng lặp giữa những mảng được gộp.
Khi gộp các mảng kết hợp, nếu cả hai mảng có cùng một khóa chuỗi, giá trị từ mảng đứng sau sẽ ghi đè giá trị từ mảng đứng trước:
<?php
$defaults = ["theme" => "light", "language" => "english", "notifications" => true];
$userSettings = ["theme" => "dark", "notifications" => false];
$finalConfig = array_merge($defaults, $userSettings);
print_r($finalConfig);
// Đầu ra: Array ( [theme] => dark [language] => english [notifications] => false )
?>Lưu ý rằng "theme" đã đổi từ "light" thành "dark" và "notifications" đã đổi từ true thành false, trong khi "language" vẫn là "english" vì giá trị này không bị ghi đè. Hành vi này khiến array_merge() trở nên lý tưởng cho các hệ thống cấu hình, nơi bạn muốn các tùy chọn mặc định bị ghi đè bởi tùy chọn của người dùng.
Thứ tự đối số rất quan trọng: các giá trị từ những mảng được liệt kê sau trong lời gọi hàm sẽ ghi đè các giá trị đứng trước. Hành vi ghi đè này chỉ áp dụng cho khóa chuỗi; các khóa số luôn được đánh lại chỉ số theo thứ tự tuần tự, giống như với mảng được đánh chỉ số.
Thử thách
DễBạn sẽ nhận được hai đầu vào: một mảng cấu hình mặc định và một mảng tùy chọn của người dùng, cả hai đều ở định dạng JSON. Đọc cả hai đầu vào, chuyển mỗi chuỗi JSON thành một mảng kết hợp, dùng array_merge() để kết hợp chúng (trong đó tùy chọn của người dùng ghi đè cấu hình mặc định), rồi in ra cấu hình đã kết hợp bằng print_r().
Định dạng đầu vào: Hai dòng, mỗi dòng chứa một đối tượng JSON biểu diễn một mảng kết hợp (ví dụ: {"theme":"light","language":"english"})
Đầu ra mong đợi: Mảng cấu hình đã kết hợp, trong đó tùy chọn của người dùng ghi đè các giá trị mặc định, được hiển thị bằng print_r()
Tự làm thử
<?php
// Đọc hai đầu vào JSON
$defaultConfig = fgets(STDIN);
$userPreferences = fgets(STDIN);
// Chuyển các chuỗi JSON thành mảng kết hợp
$defaultArray = (array)json_decode($defaultConfig, true);
$userArray = (array)json_decode($userPreferences, true);
// TODO: Viết code bên dưới để merge các mảng
// In ra cấu hình sau khi merge
print_r($mergedConfig);
?>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