1. Hàm array_intersect_key() trong PHP

Hàm array_intersect_key() trong PHP có tác dụng so sánh các key của hai hay nhiều mảng với nhau. Tuy nhiên ta chỉ so sánh được giá trị của key ở mảng đầu tiên với các mảng còn lại. Tức là nếu có key ở mảng đầu tiên xuất hiện ở các mảng sau thì giá trị này của mảng sẽ được in ra. Đối với mảng có key giống mảng khác nhưng lại không xuất hiện trong mảng đầu tiên thì giá trị key này cũng không được hiển thị.

Kết quả được 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. Cùng với đó value của mảng mới sẽ được giữ nguyên so với mảng ban đầu.

Chú ý

Ở đây phần tử bằng nhau trong lập trình có nghĩa là nó được biểu diễn chuỗi giống nhau. Hay nó có thể nhìn giống như sau:

(string) $elem1 === (string) $elem2

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

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

array_intersect_key($array1, $array2, $array3,...)

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

Hàm array_intersect_key() nhận ít nhất hai mảng làm đối số. Hàm này cũng có thể nhận số mảng truyền vào tùy ý và được ngăn cách nhau bởi dấu phẩy (,) . Trong đó mảng đầu tiên(array1) sẽ được so sánh với các mảng còn lại. Như mình đã nói ở trên thì giá trị trả về sẽ là một mảng mới 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. Nếu không có phần tử nào khới thì một mảng null (rỗng) được trả về. Value của mảng mới cũng được giữ nguyên so với mảng ban đầu (array1).

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

<?php
$a1=array("a"=>"red","b"=>"green","c"=>"blue");
$a2=array("a"=>"red","c"=>"blue","d"=>"pink");

$result=array_intersect_key($a1,$a2);
print_r($result);
?>

Kết quả

Array ( [a] => red [c] => blue )

Trong ví dụ ta có thể thấy cả hai mảng $a1$a2 đều có những key giống nhau là a c . Kết quả in ra màn hình chính là những key này với value được giữ nguyên ( value ở mảng $a1 ).

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

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

<?php
$a1=array("a"=>"red","b"=>"green","c"=>"blue");
$a2=array("c"=>"yellow","d"=>"black","e"=>"brown");
$a3=array("b"=>"green","c"=>"purple","e"=>"red");

$result=array_intersect_key($a1,$a2,$a3);
print_r($result);
?>

Kết quả

Array ( [c] => blue )

Ta có thể thấy mảng $a1 chỉ có key là c giống với các mảng còn lại nên chỉ có key này được in ra màn hình. Còn với key b tuy nó giống với key của mảng $a3 nhưng lại không giống với mảng $a2 nên không được in ra màn hình. Hai mảng $a2$a3keye giống nhau cũng không được in ra màn hình vì nó không xuất hiện ở mảng $a1 .

Ví dụ 2: So sánh key của hai mảng được lập chỉ mục

<?php
$a1=array("red","white","blue","yellow");
$a2=array("red","green","blue");

$result=array_intersect_key($a1,$a2);
print_r($result);
?>

Kết quả

Array ( [0] => red [1] => white [2] => blue )

Trong ví dụ này mảng $a1 có key theo thứ tự là 0 , 1 , 2 , 3 . Còn mảng $a2key theo thứ tự là 0 , 1 , 2 . Vì vậy giá trị key giống nhau sẽ là 0 , 1 , 2 của hai mảng là giống nhau và được in ra màn hình với value giữ nguyên theo mảng $a1

Ví dụ 3:

<?php  
$name1 = array("1" => "PHP", "2" => "Python", "3" => "HTML","Java");  
$name2 = array("1" => "Css", "2" => "C", "5" => "C++","JavaScript");   
print_r(array_intersect_key($name1, $name2));  
?>

Kết quả

Array ( [1] => PHP [2] => Python )