1. Hàm array_unique() trong PHP

Hàm array_unique() trong PHP được sử dụng để lọc mảng trong PHP. Vì sao phải lọc mảng? Đơn giản vì trong quá trình viết chương trình hay phát triển thì ta cần loại bỏ đi những giá trị trùng lặp hay loại bỏ những bản sao của nó. Những giá trị trùng lặp trong mảng gây tốn bộ nhớ, khó bảo trì và phát triển thậm chí gây lỗi cho cả chương trình. Lúc này hàm array_unique() sẽ giúp ta loại bỏ những phần tử có giá trị trùng lặp trong mảng. Nếu có nhiều phần tử trong mảng có cùng giá trị thì phần tử xuất hiện đầu tiên sẽ được giữ lại và tất cả các lần xuất hiện khác của phần tử này sẽ bị xóa khỏi mảng. Hàm sẽ trả về mảng mới đã được lọc bỏ những phần tử trùng lặp. Hàm array_unique() được giới thiệu và sử dụng từ phiên bản PHP 4.0.1

Lưu ý 

Ở đâ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 hàm array_unique() trong PHP

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

array array_unique($array , $flags)

Trong đó :

  • $array : chỉ định mảng đầu vào mà ta muốn loại bỏ những giá trị trùng lặp. Tham số này là bắt buộc trong hàm
  • $flags : chỉ định cách so sánh các phần tử hay những mục của mảng. Đây là tham số không bắt buộc trong hàm

Và trong $flags có những các sau:

  • SORT_REGULAR : So sánh các phần tử bình thường (không thay đổi loại). Đây là giá trị mặc định của $flags
  • SORT_NUMERIC : So sánh các phần tử dưới dạng số
  • SORT_STRING : So sánh các phần tử dưới dạng chuỗi
  • SORT_LOCALE_STRING : So sánh các phần tử dưới dạng chuỗi, dựa trên ngôn ngữ hiện tại

Hàm array_unique() sẽ chỉ chấp nhận hai tham số như trên. Với việc ta truyền vào một mảng và hàm array_unique() sẽ loại bỏ tất cả những giá trị trùng lặp. Giá trị trả về sẽ là một mảng mới đã được loại bỏ những giá trị trùng lặp. Với những giá trị được giữ nguyên trong mảng thì hàm array_unique() cũng sẽ giữ nguyên mà không thay đổi gì.

Chú ý

Hàm array_unique() sẽ hoạt động không hiệu quả trên mảng đa chiều.

Ví dụ : loại bỏ những giá trị trùng lặp khỏi một mảng

<?php
$a=array("a"=>"PHP","b"=>"Java","c"=>"PHP","Java","HTML");

echo '<pre>';
print_r(array_unique($a));
?>

Kết quả

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

Với những giá trị trùng lặp trong mảng $a ta chỉ cần truyền mảng vào hàm array_unique() thì những giá trị trùng lặp đã bị loại bỏ. Cùng với đó ta có thể thấy giá trị được giữ lại đều giống với nó lần đầu xuất hiện trong mảng. Tức là hàm array_unique() sẽ giữ lại giá trị đầu tiên khi xuất hiện và giá trị trả về cũng sẽ được giữ nguyên như vậy.

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

Ví dụ 1:

<?php 
$input = array("a" => "green", "red", "b" => "Green", "blue", "c"=>"red"); 
$result = array_unique($input); 

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

Kết quả

Array
(
    [a] => green
    [0] => red
    [b] => Green
    [1] => blue
)

Ta có thể thấy sự so sánh chặt chẽ như thế nào. Giá trị “green”“Green” tưởng như là giống nhau và sẽ bị loại bỏ. Nhưng chúng không hề giống nhau và sẽ không bị loại bỏ trong ví dụ này. Bởi vì chúng được phân biệt chữ hoa chữ thường.

Ví dụ 2:

<?php
$a=array(3,"a"=>"red","green","b"=>"GrEen","c"=>"red","d"=>"Yellow");
echo '<pre>';
print_r(array_unique($a,SORT_NUMERIC));
?>

Kết quả

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

Khi đặt thêm tham số SORT_NUMERIC vào trong hàm array_unique() thì hãy cẩn thận với những mảng có giá trị là chuỗi nhé. Nó sẽ loại bỏ hết những phần tử có giá trị chuỗi của mảng và chỉ giữ lại giá trị chuỗi xuất hiện đầu tiên của mảng đó thôi.

Ví dụ 3:

<?php
$input = array(4, "4", "3", 4, 3, "3");
$result = array_unique($input);

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

Kết quả

array(2) {
  [0]=>
  int(4)
  [2]=>
  string(1) "3"
}