1. Hàm array_uintersect() trong PHP

Hàm array_uintersect() trong PHP được sử dụng để lấy ra những giá trị trong các mảng. Cụ thể hàm array_uintersect() sẽ sử dụng một hàm callback do người dùng truyền vào và tạo ra một mảng mới gốm các phần tử có value giống nhau của 2 hay nhiều mảng truyền vào. Các value của mảng đầu tiên được so sánh với tất cả các mảng khác với sự trợ giúp của hàm callback và các giá trị phù hợp được trả về. Nếu key của các giá trị đó ở mỗi mảng là khác nhau thì key của giá trị ở mảng đầu tiên sẽ được sử dụng làm key ở mảng mới. Hàm array_unitersect() đượ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_unitersect() trong PHP

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

array_uintersect($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 $array2 . 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_unitersect() tùy thích. Hàm sẽ so sánh và trả về các value 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 callback được truyền vào. Giá trị chả về sẽ là một mảng chứa những value này. Các key trong mảng mới này sẽ là key tương ứng với value của mảng $array1 . 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 giá trị của hai mảng (sử dụng một hàm do người dùng xác định để so sánh các giá trị) 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"=>"Java","b"=>"Python","c"=>"PHP");
$a2=array("a"=>"PHP","b"=>"HTML","e"=>"PHP");

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

Kết quả

Array
(
    [c] => PHP
)

Ta có thể thấy những trong mảng $a1$a2 có value giống nhau và thỏa mãn với hàm callback nhưng key của chúng trong hai mảng thì khác nhau. Hàm array_unitersect() sẽ lấy key tương ứng với value ở mảng $a1 để trả về.

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

Ví dụ 1: So sánh các giá trị của ba mảng (sử dụng một hàm do người dùng xác định để so sánh các giá trị) 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"=>"PHP","b"=>"Java","c"=>"HTML","Python");
$a2=array("A"=>"PHP","b"=>"Java","Python","CSS");
$a3=array("a"=>"Java","b"=>"PHP","Python","CSS");

$result=array_uintersect($a1,$a2,$a3,"myfunction");
echo '<pre>';
print_r($result);
?>

Kết quả

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

Trong ví dụ này khi so sánh với ba mảng thì value của mảng $a1 phải giống với value của tất cả những mảng khác và thỏa mãn với hàm callback . Việc truyền vào hai ba hay bao nhiêu mảng thì nguyên lý hoạt động của nó cũng giống nhau.

Ví dụ 2: so sánh giá trị của hai 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","yellow");
$a2=array("A"=>"red","b"=>"GREEN","yellow","black");

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

Kết quả

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

Trong ví dụ này ngoài những value hiển thị trên phần kết quả thì có thể thấy có giá trị “green” là giống nhau trong hai mảng. Tuy nhiên nó lại không được lấy và hiển thị trong mảng mới. Tại sao vậy? Vì giá trị này không thỏa mãn hàm callback do người dùng truyền vào vì nó phân biệt chữ hoa chữ thường. Nếu muốn lấy hết những giá trị mà không phân biệt chữ hoa chữ thường ta có thể dùng hàm strcasecmp() theo cú pháp sau:

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

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

Kết quả

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

Ví dụ 3:

<?php  
function callback($v1, $v2)   
{  
   if ($v1 === $v2){  
       return 0;  
   }   
       return($v1>$v2)?1:-1;  
}  
$a1 = array(40, 53, 43, 23);  
$a2 = array(54, 40, 42, 43);  
$a3 = array(34, 53, 46, 32);  
$result = array_uintersect($a1, $a2, $a3, "callback");  
print_r($result);  
?>

Kết quả

Array ( )

Vì không có value nào thỏa mãn nên một mảng rỗng sẽ được trả về.