1. Hàm array_diff_key() trong PHP

Hàm array_diff_key() cũng dùng để so sánh hai mảng trong PHP cũng giống như hàm array_diff() và hàm array_diff_assoc() . Sau khi đọc hai bài trước thì chắc hẳn các bạn cũng đoán được hàm này sẽ so sánh mảng như thế nào. Với hàm array_diff() sẽ lấy values của mảng để so sánh. Hàm array_diff_assoc() sẽ lấy cả valuekey để so sánh mảng. Còn với hàm array_diff_key() sẽ chỉ lấy giá trị key của mảng để so sánh.

Hàm này cũng có thể so sánh key của hai hay nhiều mảng trong PHP. Nó sẽ trả về một mảng có chứa các key tồn tại trong mảng đầu tiên mà không có trong mảng thứ hai hay thứ ba … Hàm này được giới thiệu và sử dụng từ phiên bản PHP 5.1

2. Cú pháp hàm array_diff_key() trong PHP

Ta có cú pháp của hàm array_diff_key() trong PHP là:

array_diff_key(array1, array2, array3, ...)

Trong đó:

  • array1 : Bắt buộc. Mảng nguồn để mảng khác so sánh với
  • array2 : Bắt buộc. Một mảng để được so sánh với mảng nguồn
  • array3 : Tùy ý. Một mảng để được so sánh với mảng nguồn

Hàm array_diff_key() có giá trị truyền vào là n mảng. Tức là ta có thể truyền vào bao nhiêu mảng tùy thích, và giá trị trả về sẽ là một mảng chứa các key mà chỉ tồn tại ở mảng đầu tiên và không tồn tại ở các mảng sau.

Tuy nhiên với cú pháp này thì hàm sẽ chỉ kiểm tra một chiều của mảng đa chiều. Nếu ta muốn kiểm tra sâu hơn kích thước của mảng đa chiều ta sẽ sử dụng cú pháp sau:

array_diff_key($array1[0], $array2[0]);

Ví dụ: so sánh key của hai mảng trong PHP

<?php
  $a1=array("a"=>"red","b"=>"green","c"=>"blue");
  $a2=array("a"=>"red","c"=>"blue","d"=>"pink");

  $result=array_diff_key($a1,$a2);
  print_r($result);
?>

Kết quả

Array ( [b] => green )

3. Ví dụ về hàm array_diff_key() trong PHP

Ví dụ 1: so sánh key của ba mảng trong PHP

<?php
  $a1=array("a"=>"red","b"=>"green","c"=>"blue");
  $a2=array("c"=>"yellow","d"=>"black","e"=>"brown");
  $a3=array("f"=>"green","c"=>"purple","g"=>"red");

  $result=array_diff_key($a1,$a2,$a3);
  echo '<pre>';
  print_r($result);
?>

Kết quả

Array
(
    [a] => red
    [b] => green
)

Ví dụ 2: so sánh key của 2 mảng được lập chỉ mục

<?php
  $a1=array("red","green","blue","yellow");
  $a2=array("red","green","blue");

  $result=array_diff_key($a1,$a2);
  print_r($result);
?>

Kết quả

Array ( [3] => yellow )

Ví dụ 3: so sánh key của hai mảng

<?php
  $a1=array("a1"=>"red","b1"=>"green","c1"=>"blue");
  $a2=array("a1"=>"red","b1"=>"green","c1"=>"blue","d1"=>"yellow");
  $result=array_diff_key($a1,$a2);
  echo '<pre>';
  print_r($result);
?>

Kết quả

Array
(
)

Trong mảng $a2 có key khác so với mảng $a1. Ta có thể thấy trong ví dụ này lại trả về một mảng rỗng. Có nghĩa là hàm sẽ chỉ trả về giá trị key khác nhau của mảng một so với mảng hai hay ba thôi. Còn với những key của mảng hai hay ba khác với mảng một thì key này không được in ra.