1. Hàm array_diff_assoc trong PHP

Hàm array_diff_assoc() trong PHP cũng có tác dụng so sánh hai hay nhiều mảng trong PHP. Hàm này cũng sẽ trả về sự khác biệt tương tự như hàm array_diff() như mình đã giới thiệu ở bài trước. Tuy nhiên với hàm array_diff() sẽ chỉ lấy ra value chỉ xuất hiện ở mảng đầu tiên mà không xuất hiện ở mảng thứ hai. Còn với hàm array_diff_assoc() thì sẽ lấy cả key xuất hiện ở mảng đầu tiên mà không xuất hiện ở những mảng còn lại. 

Ta có thể hiểu hàm array_diff_assoc() có tác dụng y hệt như hàm array_diff() là so sánh hai hay nhiều mảng. Chỉ có điều hàm array_diff_assoc() lấy cả key để so sánh.

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

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

array_diff_assoc(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_assoc() có giá trị truyền vào là n mảng, tức là bạn 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 phần tử mà chỉ tồn tại ở mảng đầu tiên và không tồn tại ở các mảng sau.

Hàm array_diff_assoc() cũng sẽ chỉ kiểu tra giá trị một chiều của mảng đa chiều nếu ta sử dụng cú pháp này. Và nếu muốn kiểu tra với mảng đa chiều ta có thể sử dụng cú pháp sau:

Array_diff_assoc ($ Array1 [0], $ Array2 [0]); .

Khi so sánh với mảng ta cũng phải đảm bảo đúng thứ tự tham số truyền vào khi so sánh với mảng nhiều key hơn. Mảng cần so sánh phải là mảng đầu tiên.

Ví dụ: so sánh hai mảng

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

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

Kết quả

Array ( [d] => yellow )

Chú ý

Hai giá trị key=>values được cho là bằng nhau khi (string) $elem1 === (string) $elem2 . Có nghĩa là cách biểu diễn chuỗi phải giống nhau. Một quá trình kiểm tra chặt chẽ diễn ra để so sánh chuỗi hay biểu diễn chuỗi giống nhau.

Ví dụ:

<?php
  $array1 = array(0, 1, 2);
  $array2 = array("00", "01", "2");
  $result = array_diff_assoc($array1, $array2);
  echo '<pre>';
  var_dump($result);
?>

Kết quả

array(2) {
  [0]=>
  int(0)
  [1]=>
  int(1)
}

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

Ví dụ 1: so sánh 3 mảng và trả về sự khác biệt

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

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

Kết quả

array(2) {
  ["c"]=>
  string(4) "blue"
  ["d"]=>
  string(6) "yellow"
}

Ví dụ 2: so sánh hai mảng và trả về sự khác biệt

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

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

Kết quả

Array
(
    [a] => red
    [b] => green
    [c] => blue
    [d] => yellow
)

Ở đây ta có thể thấy có những values ở mảng một giống với mảng thứ hai nhưng kết quả vẫn được in ra trên màn hình vì key của chúng khác nhau. Đây chính là sự khác biệt giữa hàm array_diff_assoc() và hàm array_diff()

Ví dụ 3: cũng là so sánh 3 mảng và trả về sự khác biệt

<?php
  $array1 = array('name'=>'PHP','website'=> 'laptrinhtudau.com','time'=>'3 tháng');
 
  $array2 = array('name'=>'PHP','website'=>'https://laptrinhtudau.com','time'=>'3 tháng');
 
  $array3 = array('name'=> 'PHP','website'=> 'laptrinhtudau.com','time'=>'3 tháng');
 
  echo '<pre>';
  print_r(array_diff_assoc($array1, $array2, $array3));
?>

Kết quả

Array
(
)

Như ta có thể thấy cả ba giá trị của mảng đầu tiên đều xuất hiện ở những mảng còn lại. Tuy nhiên giá trị laptrinhtudau.com có ở mảng một và ba, không có ở mảng thứ hai. Tuy nhiên cũng không được chọn. Điều này chứng tỏ rằng khi so sánh mảng dù giá trị đó có xuất hiện ở mảng nào đó thôi thì cũng không được chọn và không được in ra màn hình.