1. Hàm array_intersect_uassoc() trong PHP

Hàm array_intersect_uassoc() trong PHP được sử dụng để so sánh hai hay nhiều mảng với nhau. Hàm này sẽ lấy cả keyvalue của mảng ban đầu để so sánh với những mảng còn lại. Tuy nhiên hàm array_intersect_uassoc() lại sử dụng một hàm do người dùng xác định để so sánh và trả về kết quả phù hợp. Với hàm do người dùng tự xác định này ta sẽ dùng nó để so sánh key trong các mảng. Sau đó hàm này sẽ trả về một mảng mới chứa tất cả các giá trị của mảng ban đầu có trong các mảng còn lại.

Nói tóm lại thì hàm array_intersect_uassoc() cũng giống như hàm array_intersect_assoc() . Chỉ khác là nó có thêm một hàm do người dùng tự truyền vào để xử lý hay là một hàm callback mà thôi.

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

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

array_intersect_uassoc($array1, $array2, $array3…, $key_compare_func)

Trong đó:

  • array1 : Bắt buộc. Mảng để so sánh
  • array2 : Bắt buộc. Mảng so sánh với mảng array1
  • array3 : Tùy ý. Một mảng khác để so sánh với mảng array1
  • key_compare_func : Bắt buộc. Hàm callback do người dùng tự định nghĩa

Hàm array_intersect_uassoc() có giá trị truyền vào là n mảng, Trong đó mảng đầu tiên sẽ được so sánh với các mảng còn lại, đồng thời $key_compare_func là hàm callback mà ta muốn gọi đến với kết quả trả về sẽ là

  • Hàm này phải trả về 0 nếu $key1 = $key2, lớn hơn 0 nếu $key1 > $key2 và bé hơn 0 nếu$key1 < $key2
  • Sự so sánh dựa vào thứ tự trong mã ASCII

Kết quả trả về sẽ là một mảng chứa những phần tử ở mảng đầu tiên mà có keyvalue tồn tại ở các mảng còn lại.

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

<?php
$array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red");
$array2 = array("a" => "GREEN", "B" => "brown", "yellow", "red");

print_r(array_intersect_uassoc($array1, $array2, "strcasecmp"));
?>

Kết quả

Array ( [b] => brown )

Trong ví dụ này có thể thấy trong mảng 1 và mảng đều có tồn tại keybvaluebrown . Khi callback gọi tới hàm strcasecmp sẽ so sánh giá trị key và bỏ qua trường hợp chữ in hoa (hàm strcasecmp trong PHP dùng để so sánh hai chuỗi mà không phân biệt chữ in hoa hay in thường có thể tham khảo thêm hàm này tại đây).

3. Ví dụ hàm array_intersect_uassoc() trong PHP

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

<?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"=>"green","d"=>"blue");
$a3=array("e"=>"yellow","a"=>"red","d"=>"blue");

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

Kết quả

Array ( [a] => red )

Ví dụ 2: so sánh mảng và giá trị trả về là null

<?php
function uassoc_intersectFunction($arr1, $arr2){
    if ($arr1 === $arr2) {
        return 0;
    }
    return ($arr1 > $arr2) ? 1 : -1;
}
$arr1 = array(
    "a" => "lttd",
    "b" => "laptrinhtudau.com",
    "c" => "PHP"
);
$arr2 = array(
    "a" => "lttd",
    "B" => "laptrinhtudau.com",
    "c" => "Java"
);
$arr3 = array(
    "a" => "LTTd",
    "B" => "Laptrinhtudau.com",
    "c" => "Python"
);

$result = array_intersect_uassoc(
$arr1, $arr2, $arr3, "uassoc_intersectFunction");
print_r($result);

?>

Kết quả

Array ( )

Trong ví dụ này chúng ta không sử dụng hàm strcasecmp để không phân biệt chữ hoa chữ thường nên kết quả hiển thị sẽ là một mảng rỗng.