1. Hàm array_intersect_ukey() trong PHP

Hàm array_intersect_ukey() trong PHP dùng để so sánh hai hay nhiều mảng với nhau. Hàm này sẽ lấy key của mảng ban đầu so sánh với key của những mảng còn lại. Tuy nhiên việc so sánh này lại được sử dụng một hàm do người dùng tự xác định hay hàm callback . Mảng được trả về là một mảng mới mà trong mảng này chứa key của mảng ban đầu tồn tại ở tất cả các mảng còn lại. Cùng với đó value của mảng mới sẽ được giữ nguyên so với mảng ban đầu.

Tóm lại thì hàm array_intersect_ukey() có tác dụng giống như hàm array_intersect_key() chỉ có điều nó sẽ sử dụng thêm một hàm do người dùng truyền vào hay là hàm callback mà thôi.

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

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

array_intersect_ukey( $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_ukey() 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ó key tồn tại ở các mảng còn lại. Value của mảng mới sẽ được giữ nguyên so với mảng ban đầu.

Ví dụ: so sánh key 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");
$a2=array("a"=>"blue","b"=>"black","e"=>"blue");

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

Kết quả

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

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

Ví dụ 1: so sánh key 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"=>"black","b"=>"yellow","d"=>"brown");
$a3=array("e"=>"purple","f"=>"white","a"=>"gold");

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

Kết quả

Array ( [a] => red )

Ví dụ 2: so sánh key của bốn mảng

<?php
function ukey_intersectFunction($x, $y){	
  if ($x === $y)
     return 0;
  return ($x > $y)? 1: -1;
}
$arr1 = array(
    "a" => "A",
    "b" => "B",
    "c" => "D",
    "d" => "E",
    "p" => "F"
);
$arr2 = array(
    "o" => "A",
    "b" => "B",
    "h" => "V",
    "x" => "T",
    "p" => "X"
);
$arr3 = array(
    "a" => "N",
    "b" => "B",
    "h" => "O",
    "x" => "T",
    "p" => "P"
);
$arr4 = array(
    "s" => "W",
    "b" => "B",
    "z" => "D",
    "x" => "T",
    "p" => "P"
);

$result = array_intersect_ukey($arr1,
$arr2, $arr3, $arr4, "ukey_intersectFunction");

print_r($result);

?>

Kết quả

Array ( [b] => B [p] => F )

Như ta có thể thấy hàm này sẽ chỉ so sánh key ở mảng đầu tiên với những mảng còn lại. Với những mảng còn lại mà có key giống với những mảng khác nhưng lại không xuất hiện trong mảng một thì key này cũng không được lấy.

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

<?php
function ukey_intersectFunction($x, $y){	
  if ($x === $y)
     return 0;
  return ($x > $y)? 1: -1;
}
$arr1 = array(
    "a" => "PHP",
    "b" => "Java",
    "n" => "Python"
);
$arr2 = array(
    "x" => "PHP",
    "y" => "Java",
    "z" => "Python"
);

$result = array_intersect_ukey($arr1,$arr2, "ukey_intersectFunction");
print_r($result);
?>

Kết quả

Array ( )

Ta có thể thấy dù toàn bộ value của hai mảng đem ra so sánh là giống nhau nhưng kết quả trả về vẫn là một mảng rỗng. Vì đơn giản hai mảng này không có key nào giống nhau cả.