1. Hàm array_uintersect_assoc() trong PHP

Hàm array_uintersect_assoc() trong PHP được sử dụng để so sánh hai hay nhiều mảng trong PHP. Hàm này sẽ so sánh keyvalue của những mảng được truyền vào và trả về kết quả phù hợp. Phù hợp ở đây là hàm này cũng sẽ sử dụng một hàm callback do người dùng truyền vào. Hàm array_uintersect_assoc() sẽ sử dụng hàm callback này để so sánh các value của mảng đầu tiên được truyền vào với những mảng còn lại được truyền vào hàm. Còn key của các mảng sẽ được so sánh bởi hàm array_uintersect_assoc() ( khác với hàm array_uintersect() chỉ so sánh value dựa theo hàm callback ) . Hàm array_uintersect_assoc() sẽ trả về mảng với những keyvalue của mảng đầu tiên giống với tất cả những mảng còn lại và thỏa mãn với hàm callback. Và hàm sẽ trả về Null nếu không có kết quả nào phù hợp. Hàm array_uintersect_assoc() được giới thiệu và sử dụng từ phiên bản PHP 5.0

2. Cú pháp của hàm array_uintersect_assoc() trong PHP

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

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

Trong đó:

  • $array1 : là mảng ban đầu để đem ra so sánh với những mảng còn lại. Tham số này là bắt buộc trong hàm
  • $array2 : là mảng để so sánh với mảng $array1 . Tham số này là bắt buộc trong hàm
  • $array3 : là mảng để so sánh với mảng $array1 . Tham số này là tùy chọn trong hàm
  • myfunction : hàm 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.

Ta có thể truyền bao nhiêu mảng vào hàm array_uintersect_assoc() tùy thích. Hàm sẽ so sánh và trả về các valuekey của mảng $array1 có mặt trong tất cả các mảng còn lại được truyền vào hàm và thỏa mãn hàm myfunction . Giá trị chả về sẽ là một mảng chứa những value và key này. Với key sẽ được so sánh bởi hàm array_uintersect_assoc()value được so sánh bởi hàm myfuction . Nếu không có bất kỳ giá trị nào hợp lệ thì hàm sẽ trả về Null .

Ví dụ : So sánh các keyvalue của hai mảng và trả về các kết quả phù hợp

<?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","c"=>"green");

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

Kết quả

Array ( [a] => red )

Trong ví dụ này khá đơn giản ta có thể thấy chỉ có giá trị “red” giống nhau và thỏa mãn hàm myfunction trong hai mảng $a1$a2 . Giá trị trả về là mảng chứa keyvalue này.

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

Ví dụ 1: So sánh các keyvalue của ba mảng và trả về các kết quả phù hợp

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

$a1=array("a"=>"red","b"=>"green","c"=>"blue","yellow");
$a2=array("A"=>"red","b"=>"GREEN","yellow","black");
$a3=array("a"=>"red","b"=>"green","yellow","black");

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

Kết quả

Array ( [0] => yellow )

Trong ví dụ này ta có thể thấy những value giống nhau như “red”“green” . Tuy nhiên khi so sánh trong hàm myfunction chúng lại khác nhau vì nó phân biệt chữ hoa chữ thường. Và với những key của những giá trị này cũng vậy. Chỉ có duy nhất value“yellow” giống nhau trong cả ba mảng và thỏa mãn hàm myfunction .

Ví dụ 2 : So sánh các keyvalue của ba mảng và trả về các kết quả phù hợp

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

echo '<pre>';
print_r(array_uintersect_assoc($array1, $array2, "strcasecmp"));
?>

Kết quả

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

Như mình đã nói ở trên thì key của những mảng được truyền vào sẽ được so sánh bởi hàm array_uintersect_assoc() chứ không so sánh dựa trên hàm do ta truyền vào. Vì vậy dù có truyền vào hàm strcasecmp() thì các key sẽ vẫn phân biệt chữ hoa chữ thường. Còn với value khi ta truyền vào hàm strcasecmp() thì không còn phân biệt chữ hoa chữ thường nữa.

Ví dụ 3:

<?php

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

$arr1 = array (
    "a" => "php",
    "b" => "Java",
    "c" => "Python",
    "d" => "C",
    "e" => "Laptrinhtudau"
);
$arr2 = array (
    "f" => "PHP",
    "g" => "HTML ",
    "h" => "CSS",
    "i" => "laptrinhtudau.com"
);
$arr3 = array (
    "j" => "SQL",
    "k" => "C++ ",
    "l" => "C#",
    "m" => "Js"
);

$result = array_uintersect_assoc( $arr1, $arr2, $arr3, "arr_uintersect_Function" );

print_r($result);

?>

Kết quả

Array ( )

Do không có giá trị nào thỏa mãn nên hàm rỗng sẽ được trả về.