1. Hàm array_udiff_assoc() trong PHP

Hàm array_udiff_assoc() trong PHP được sử dụng để so sánh giữa hai hoặc nhiều mảng. Hàm tính toán các mảng khác biệt từ hai hoặc nhiều mảng bằng cách sử dụng hàm do người dùng xác định so sánh dữ liệu (hàm callback) và bổ sung thêm việc kiểm tra chỉ mục. Nó trả về tất cả các mục có trong mảng đầu tiên và không có trong bất kỳ mảng nào khác. Nó khác với hàm array_diff_assoc() vì nó cho phép một hàm do người dùng định nghĩa quyết định tiêu chí. Hàm được giới thiệu và sử dụng từ phiên bản PHP 5.0

Chúng ta chỉ cần lưu ý và nhớ rằng hàm array_udiff_assoc() sử dụng một hàm tích hợp để so sánh các khóa và một hàm do người dùng xác định để so sánh các giá trị! Nó sẽ so sánh cả keyvalue của mảng ban đầu với những mảng còn lại.

2. Cu pháp của hàm array_udiff_assoc() trong PHP

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

array_udiff_assoc($array1, $array2, $array3,...,myfunction)

Trong đó :

  • $array1 : mảng ban đầu được truyền vào để so sánh với những mảng khác. Tham số này là bắt buộc trong hàm
  • $array2 : mảng được so sánh với mảng $array1. Tham số này là bắt buộc trong hàm
  • $array3 : mảng được so sánh với $array1. Tham số này là không bắt buộc có trong hàm
  • myfunction : hàm callback do người dùng truyền vào. Hàm so sánh phải trả về một số nguyên nhỏ hơn, bằng hoặc lớn hơn 0 nếu đối số đầu tiên được coi là tương ứng nhỏ hơn, bằng hoặc lớn hơn đối số thứ hai.

Hàm array_udiff_assoc() để so sánh các key của một mảng và hàm do người dùng xác định để so sánh các giá trị. Hàm chỉ kiểm tra một chiều của mảng n chiều. Nếu muốn kiểm tra sâu hơn ta sử dụng cú pháp sau:

array_udiff_assoc($array1[0], $array2[0], "myfunction");

Hàm sẽ trả về một mảng chứa các phần tử của mảng đầu tiên không có trong tất cả các mảng khác. Nếu có tất cả phần tử mảng thì hàm sẽ trả về NULL. Lưu ý rằng các khóa được sử dụng trong phép so sánh không giống như array_diff()array_udiff() .

Ví dụ: So sánh các key và giá trị của hai mảng (sử dụng một hàm tích hợp để so sánh các key và một hàm do người dùng xác định để so sánh các value) và trả về sự khác biệt

<?php
function myfunction($a,$b)
{
if ($a===$b)
  {
  return 0;
  }
  return ($a>$b)?1:-1;
}

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

$result=array_udiff_assoc($a1,$a2,"myfunction");
print_r($result);
?>

Kết quả

Array ( [b] => green [c] => blue )

Hãy nhớ rằng cả keyvalue của hai mảng sẽ đều được so sánh khi dùng hàm array_udiff_assoc() . Trong ví dụ này với việc có value “green” của mảng $a1 khác với mảng $a2 . Cùng với đó mảng $a1 cũng có key“c” khác với key“d” của mảng $a2 . Từ đây ta có kết quả hiển thị như trên.

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

Ví dụ 1: So sánh các key và giá trị của bốn mảng (sử dụng một hàm tích hợp để so sánh các key và một hàm do người dùng xác định để so sánh các value) và trả về sự khác biệt

<?php
function arr_udiffassocFun($x, $y)
{	
    return ($x === $y)? 0 : 1;
}

$arr1 = array(
    "a" => "PHP",
    "b" => "Python",
    "d" => "Java",
    "r" => "HTML"
);
$arr2 = array(
    "a" => "PHP",
    "y" => "Python",
    "d" => "Java",
    "r" => "HTML"
);
$arr3 = array(
    "a" => "PHP",
    "y" => "Bill Gate",
    "d" => "Java",
    "r" => "SQL"
);
$arr4 = array(
    "a" => "Raj",
    "y" => "Bill Gate",
    "d" => "Java",
    "r" => "CSS"
);
$result = array_udiff_assoc($arr1,
$arr2, $arr3, $arr4, "arr_udiffassocFun");
print_r($result);
?>

Kết quả

Array ( [b] => Python )

Ví dụ 2:

<?php  
function myfunction($a,$b)   
{  
return ($a==$b)?0:1;  
}  
$a1=array("a"=>"php","b"=>"java","c"=>"python");  
$a2=array("a"=>"php","b"=>"python","c"=>"java");
echo '<pre>';
print_r(array_udiff_assoc($a1,$a2,"myfunction"));  
?>

Kết quả

Array
(
    [b] => java
    [c] => python
)