Hàm array_diff_key() trong PHP
Trần Thị Vân
- 1165
- 03/08/2025
Chức năng của Hàm array_diff_key() trong PHP
Hàm array_diff_key() trong PHP dùng để lấy những phần tử trong mảng đầu tiên có Khóa (Key) không giống với Khóa (Key) của các phần tử trong mảng khác để cho vào mảng mới, các Khóa (Key) và giá trị của phần tử không thay đổi khi chuyển qua mảng mới, hàm này không làm thay đổi các mảng gốc.
Cú pháp của Hàm array_diff_key() trong PHP
$mảng_mới = array_diff_key($biến_mảng_1,$biến_mảng_2,$biến_mảng_3);
$biến_mảng_1,$biến_mảng_2,$biến_mảng_3: Thêm vào bao nhiêu mảng cũng được, từ 2 mảng trở lên.
$mảng_mới: Kết quả trả về mảng mới mà không làm thay đổi các mảng gốc.
Ví dụ Hàm array_diff_key() trong PHP
<h2>Hàm array_diff_key() các mảng liên kết</h2>
<?php
$manglkmot = array("Dung"=>29,"Van"=>28,"Nhím"=>28,"Luc"=>35);
$manglkhai = array("Cherry"=>29,"Van"=>30,"Quynh"=>1);
$manglkba = array("Cherry"=>29,"Van"=>30,"Nhím"=>2);
$manglkmoi = array_diff_key($manglkmot,$manglkhai,$manglkba);
print_r($manglkmoi); // Kết quả: Array ( [Dung] => 29 [Luc] => 35 )
?>
<h2>Hàm array_diff_key() giữa mảng bình thường và mảng liên kết</h2>
<?php
$manglkmot = array(1=>"Dung",2=>"Van", 3=>"Nhím",35=>"Luc");
$manglkhai = array(10=>"Dung",20=>"Van", 30=>"Nhím",35=>"Luc");
$mangbtba = array(29,35,2);
$manglkmoi = array_diff_key($manglkmot,$manglkhai,$mangbtba);
print_r($manglkmoi); // Kết quả: Array ( [3] => Nhím )
?>
<h2>Hàm array_diff_key() các mảng thường</h2>
<?php
$mangmot = array("Dung","Vân","Lực","Quỳnh");
$manghai= array("Dung","Vân","Lực");
$mangba= array("Dung","Vân","Lực");
$mangmoi = array_diff_key($mangmot,$manghai,$mangba);
print_r($mangmoi); // Kết quả: Array ( [3] => Quỳnh )
?>
Kết quả:
/////Hàm array_diff_key() các mảng liên kết
Array ( [Dung] => 29 [Luc] => 35 )
/////Hàm array_diff_key() giữa mảng bình thường và mảng liên kết
Array ( [3] => Nhím )
/////Hàm array_diff_key() các mảng thường
Array ( [3] => Quỳnh )
Những tình huống thực tế khi sử dụng array_diff_key() trong PHP
Trong quá trình xử lý dữ liệu, array_diff_key() hữu ích khi cần đối chiếu các mảng dựa trên key thay vì giá trị. Cách này đặc biệt phù hợp với những trường hợp cần xác định trường dữ liệu nào không còn cần thiết, kiểm tra sự khác biệt giữa cấu trúc mảng hoặc chuẩn bị dữ liệu trước khi thực hiện các bước xử lý tiếp theo.
Loại bỏ các trường dữ liệu không cần thiết khỏi mảng
Một tình huống thường gặp là mảng ban đầu chứa nhiều thông tin nhưng một số key không được phép xuất hiện trong dữ liệu đầu ra. Thay vì kiểm tra từng key bằng nhiều điều kiện, có thể tạo một mảng chứa các trường cần loại bỏ rồi dùng array_diff_key() để tìm phần dữ liệu còn lại.
Ví dụ, khi xử lý thông tin người dùng, mảng dữ liệu có thể chứa cả trường password hoặc token không nên đưa vào một bước xử lý nhất định:
<?php
$userData = [
'name' => 'Nguyen Van A',
'email' => 'a@example.com',
'password' => 'secret',
'token' => 'abc123'
];
$removeFields = [
'password' => true,
'token' => true
];
$result = array_diff_key($userData, $removeFields);
print_r($result);
?>
Kết quả chỉ giữ lại các key name và email. Điểm cần lưu ý là hàm này so sánh key, còn giá trị true trong $removeFields chỉ đóng vai trò tạo ra các key cần đối chiếu.
So sánh cấu trúc mảng trước khi xử lý dữ liệu
Khi hai mảng đại diện cho những bộ dữ liệu tương tự nhau, việc so sánh key giúp phát hiện nhanh trường nào xuất hiện ở mảng này nhưng không có ở mảng kia. Điều này hữu ích khi kiểm tra dữ liệu đầu vào, đối chiếu cấu trúc thông tin hoặc xác định các trường mới phát sinh.
<?php
$oldData = [
'name' => 'Nguyen Van A',
'email' => 'a@example.com',
'phone' => '0123456789'
];
$newData = [
'name' => 'Nguyen Van A',
'email' => 'a@example.com',
'address' => 'Ho Chi Minh'
];
$extraFields = array_diff_key($newData, $oldData);
print_r($extraFields);
?>
Trong ví dụ trên, kết quả chứa key address vì key này có trong $newData nhưng không xuất hiện trong $oldData. Cách làm này phù hợp khi chỉ quan tâm đến sự khác biệt về tên trường, không cần xét nội dung mà từng trường đang lưu trữ.
Kết hợp array_diff_key() với các hàm xử lý mảng khác
array_diff_key() có thể được kết hợp với các hàm mảng khác để tạo quy trình xử lý linh hoạt hơn. Chẳng hạn, sau khi xác định các key không cần thiết, dữ liệu có thể tiếp tục được sắp xếp, lọc hoặc chuyển đổi theo yêu cầu của ứng dụng.
Điều quan trọng là xác định rõ mục tiêu của từng bước. Nếu yêu cầu là so sánh key, nên sử dụng array_diff_key(); nếu cần so sánh giá trị, cần lựa chọn hàm khác phù hợp. Việc phân biệt hai trường hợp này giúp tránh kết quả sai khi xử lý các mảng có cấu trúc phức tạp.
Lời kết
Cảm ơn các bạn đã tham khảo bài viết Hàm array_diff_key() trong PHP.
- 0 Bình luận
Email, Điện thoại của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *