1. Hàm compact() trong PHP

Hàm compact() trong PHP giúp ta tạo một mảng trong PHP. Nhưng hàm compact() sẽ tạo một mảng từ các biến ta đã định nghĩa trước đó. Hàm này sẽ nhận các biến làm các tham số. Mỗi tham số có thể là chuỗi chứa tên biến, hoặc một mảng các biến. Mảng này có thể chứa mảng biến khác bên trong nó, hàm compact() này xử lý mảng kiểu này một cách đệ quy. Lúc này hàm compact() sẽ tạo ra mảng kết hợp với tên biến sẽ là key , giá trị của biến sẽ là giá trị của phần tử tương ứng. Nếu biến chưa được định nghĩa thì phần tử đó sẽ bị loại bỏ khỏi mảng. Hàm compact() được giới thiệu và sử dụng từ phiên bản PHP 4+

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

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

compact(var1, var2...)

Trong đó var1 (bắt buộc) , var2 (tùy chọn) là những biến đã định nghĩa trước đó mà ta sẽ truyền vào hàm compact() để tạo một mảng dựa vào những biến này. Những biến này sẽ phân tách với nhau bởi dấu phẩy ( , ) . Các đối số này thuộc kiểu dữ liệu chuỗi và chỉ định tên của các biến mà chúng ta muốn sử dụng để tạo mảng. Chúng ta cũng có thể truyền một mảng làm đối số cho hàm này. Trong trường hợp đó, tất cả các phần tử trong mảng được truyền dưới dạng tham số sẽ được thêm vào mảng đầu ra.

Giá trị trả về sẽ là một mảng mới với tất cả những biến hợp lệ đã được truyền vào nó. Hãy chú ý rằng nếu ta truyền vào biến mà lại không thấy được thêm vào mảng thì hãy hiểu rằng đó là biến không hợp lệ và đã bị hàm compact() loại bỏ. Thậm chí compact() gây ra lỗi mức E_NOTICE nếu một chuỗi nhất định tham chiếu đến một biến chưa được đặt.

Ví dụ : tạo một mảng từ các biến và giá trị của chúng

<?php
$a1 = "PHP";
$a2 = "Python";
$a3 = "Java";

$result = compact("a1", "a2", "a3");

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

Kết quả

Array
(
    [a1] => PHP
    [a2] => Python
    [a3] => Java
)

Trong ví dụ này với những biến $a1 , $a2 , $a3 ta đã tạo hợp lệ trước đó. Khi truyền vào hàm compact() thì tên của những biến này được sử dụng làm key của mảng mới. Những giá trị của tương ứng của biến được sử dụng làm value của key tương ứng. Đây là một ví dụ đơn giản với những biến đơn giản. Ta còn có thể truyền những thứ phức tạp hơn vào hàm compact() . Hãy xem những ví dụ bên dưới.

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

Ví dụ 1: tạo mảng từ mảng

<?php
  
$username = "laptrinhtudau";
$password = ".com";
$age = "2";
  
$NAME = array("username", "password");
  
$result = compact($NAME, "age");
 
echo '<pre>';
print_r($result);
  
?>

Kết quả

Array
(
    [username] => laptrinhtudau
    [password] => .com
    [age] => 2
)

Với biến $NAME (cũng chính là một mảng) . Ta cũng có thể truyền vào hàm compact() và được xử lý một cách bình thường.

Ví dụ 2: sử dụng một chuỗi không khớp với một biến và một mảng tên biến

<?php
$a1 = "PHP";
$a2 = "Java";
$a3 = "Python";

$name = array("a1", "a2");
$result = compact($name, "location", "a3");

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

Kết quả

Array
(
    [a1] => PHP
    [a2] => Java
    [a3] => Python
)

Với một biến location không hợp lệ mà ta lại truyền vào hàm compact() thì đơn giản nó sẽ bị loại bỏ như mình đã nói ở trên. Những biến hợp lệ còn lại vẫn được hàm compact() xử lý một cách bình thường.

Ví dụ 3: những cách truyền biến dạng mảng vào hàm compact()

<?php
$a1  = "PHP";
$a2 = "Java";
$a3 = "Python";

$location_vars = array("a1", "a2");

$result = compact("a3", "location_vars");
echo '<pre>';
print_r($result);
?>

Kết quả

Array
(
    [a3] => Python
    [location_vars] => Array
        (
            [0] => a1
            [1] => a2
        )

)

Hoặc :

<?php
$a1  = "PHP";
$a2 = "Java";
$a3 = "Python";

$location_vars = array("a1", "a2");

$result = compact("a3", "$location_vars");
echo '<pre>';
print_r($result);
?>

Kết quả

Array
(
    [a3] => Python
)

Hoặc

<?php
$a1  = "PHP";
$a2 = "Java";
$a3 = "Python";

$location_vars = array("a1", "a2");

$result = compact("a3", $location_vars);
echo '<pre>';
print_r($result);
?>

Kết quả

Array
(
    [a3] => Python
    [a1] => PHP
    [a2] => Java
)

Hãy đặc biệt lưu ý với việc ta truyền biến vào hàm compact()

Lưu ý

Vì các biến biến có thể không được sử dụng với các mảng Superglobal của PHP trong các hàm, các mảng Superglobal có thể không được chuyển vào hàm compact() và không được xử lý.

Hàm compact() thường sử dụng trong quá trình chuyển dữ liệu qua view trong những hệ thống MVC. Chuyển dữ liệu từ controller sang view ở các framework bạn có thể sử dụng hàm này để tối ưu các thao tác nạp dữ liệu vào mảng tổng.