1. Hàm array_uintersect_uassoc() trong PHP

Hàm array_uintersect_uassoc() trong PHP cũng được dùng để so sánh hai hay nhiều mảng trong PHP. Tuy nhiên với hàm array_uintersect_uassoc() với điểm khác biệt lớn nhất với những hàm so sánh khác là nó sẽ nhận hai hàm callback do người dùng truyền vào. Hai hàm do người dùng truyền vào này sẽ so sánh keyvalue của các mảng được truyền vào hàm. Với hàm callback đầu tiên được người dùng truyền vào hàm sẽ so sánh key của các mảng. Hàm callback thứ hai do người dùng truyền vào sẽ so sánh value của các mảng. Hàm array_uintersect_uassoc() 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 cũng sẽ trả về Null nếu không có kết quả nào phù hợp. Hàm array_uintersect_uassoc() đượ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_uassoc() trong PHP

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

array array_uintersect_uassoc( $array1, $array2, $array3..., $function_key, $function_value )

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
  • $function_key : hàm do người dùng truyền vào để so sánh key của các mảng. 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. Tham số này là bắt buộc trong hàm
  • $function_value : hàm do người dùng truyền vào để so sánh value của các mảng. 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. Tham số này là bắt buộc trong hàm

Ta có thể truyền bao nhiêu mảng vào hàm array_uintersect_uassoc() 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ới các key sẽ thỏa mãn với hàm $function_key và các value sẽ thỏa mãn hàm $function_value . Giá trị chả về sẽ là một mảng chứa những valuekey này. 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_key($a,$b)
{
if ($a===$b)
  {
  return 0;
  }
  return ($a>$b)?1:-1;
}

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

$a1=array("a"=>"PHP","b"=>"Java","c"=>"Python");
$a2=array("a"=>"PHP","b"=>"Java","c"=>"HTML");

$result=array_uintersect_uassoc($a1,$a2,"myfunction_key","myfunction_value");
echo '<pre>';
print_r($result);
?>

Kết quả

Array
(
    [a] => PHP
    [b] => Java
)

Ở ví dụ ta đã có hai hàm tự tạo là myfunction_key()myfunction_value() để sử dụng và truyền vào hàm array_uintersect_uassoc() . Lần lượt nó sẽ so sánh keyvalue của hai mảng $a1$a2 có thỏa mãn điều kiện không.

3. Ví dụ về hàm array_uintersect_uassoc() 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

$a1=array("a"=>"PHP","b"=>"Python","c"=>"HTML","CSS");
$a2=array("A"=>"PHP","b"=>"PYTHON","SQL","CSS");
$a3=array("a"=>"PHP","b"=>"PyThon","CSS","SQL");
$result=array_uintersect_uassoc($a1,$a2,$a3,"strcasecmp","strcasecmp");

echo '<pre>';
print_r($result);
?>

Kết quả

Array
(
    [a] => PHP
    [b] => Python
)

Với việc truyền vào hàm strcasecmp() ta sẽ so sánh keyvalue của các mảng mà không phân biệt chữ hoa hay chữ thường. Vì vậy kết quả trả về là những giá trị như phần kết quả. Tuy nhiên nếu không sử dụng hàm strcasecmp() thì kết quả trả về sẽ khác nhé. Hãy xem ví dụ bên dưới

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  
function  mykey($a, $b)  
{  
        if ($a == $b)  
        return 0;  
return ($a > $b) ? 1 : -1;  
}  
  
function myvalue($a, $b)  
{  
        if ($a == $b)  
        return 0;  
return ($a > $b) ? 1 : -1;  
}  
$a1=array("a"=>"PHP","b"=>"Python","c"=>"HTML","CSS"); $a2=array("A"=>"PHP","b"=>"PYTHON","SQL","CSS"); $a3=array("a"=>"PHP","b"=>"PyThon","CSS","SQL"); 

echo '<pre>';
$res = array_uintersect_uassoc($a1, $a2,$a3, "mykey", "myvalue");  
print_r($res);  
?>

Kết quả

Array
(
)

Với ví dụ này khi truyền những keyvalue của các mảng vào hàm mykey()myvalue() để so sánh thì chúng sẽ không thỏa mãn điều kiện. Đơn giản vì nó phân biệt chữ hoa chữ thường. Vì vậy mà một mảng rỗng sẽ được trả về.

Chú ý

Khi sử dụng hàm array_uintersect_uassoc() như mình đã nói ở trên thì có thể truyền vào bao nhiêu mảng tùy thích. Tuy nhiên phải đặc biệt chú ý rằng hai tham số cuối cùng sẽ luôn phải là hai hàm callback do người dùng truyền vào hợp lệ. Thứ tự nó luôn phải là hai tham số cuối và không thể đổi chỗ lên đầu hay vào dữa. Nếu không thì hàm sẽ gây ra lỗi và không hoạt động.