1. Hàm list() trong PHP

Hàm list() trong PHP được sử dụng để gán giá trị cho một danh sách các biến. Nghĩa là sao, hàm list() sẽ gán những biến ta chuyền vào hàm với những giá trị tương ứng mà chỉ cần một lần thao tác. Ví dụ như việc ta truyền vào ba biến là $a , $b$c cùng với đó gán chúng cho một mảng là $array thì lúc này các biến $a , $b$c sẽ được gán lần lượt cho những phần tử trong mảng $array . Ta có thể hình dung hàm list() như hàm array() và nó không hẳn thực sự là một hàm. Nhưng ở đây nó là cấu trúc của ngôn ngữ có chức năng giúp việc gán các biến ngắn gọn hơn.

Đương nhiên khi sử dụng list() cũng cần có một số lưu ý. Ta sẽ không thể sử dụng hàm list() để giải nén các chuỗi và expressions trong list() cũng không được để trống hoàn toàn . Số lượng biến truyền vào cũng không được vượt quá độ dài của mảng. Thậm chí ở những phiên bản trước PHP 7.1 thì hàm list() chỉ hoạt động trên những mảng số.

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

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

list($var1, $var2, $var3, ....)=$array

Trong đó :

  • $var1 : Biến thứ nhất để gán một giá trị cho nó. Đây là tham số bắt buộc trong hàm
  • $var2 , $var3 :  Biến thứ hai và thứ ba để gán một giá trị cho nó. Đây là tham số tùy chọn trong hàm
  • $array : mảng mà ta sẽ lấy phần tử gán cho các biến $var1 , $var2 , $var3 ,… Với $var1 được gán cho phần tử đầu tiên $var2 được gán cho phần tử thứ hai và $var3 được gán cho phần tử thứ ba …

Hàm list() chấp nhận một danh sách các biến được truyền vào được ngăn cách với nhau bởi dấu phẩy . Các biến này được gán lần lượt với những phần tử như mình nói ở trên. Ta phải truyền vào hàm list() ít nhất một biến. Hàm list() sẽ trả về mảng với những biến được gán. Nếu số lượng biến truyền vào nhiều hơn số phần tử trong mảng thì hàm list() sẽ xảy ra lỗi.

Từ phiên bản PHP 7.1 về trước thì list() chỉ hoạt động với những mảng tuần tự dạng số. Từ phiên bản PHP 7.1 trở lên bây giờ có thể chỉ định các key trong list(). Điều này cho phép tái cấu trúc mảng với các key không phải số nguyên hoặc không tuần tự.

Ví dụ: gán các biến như thể chúng là một mảng

<?php
$my_array = array("PHP","Java","Python");

list($a, $b, $c) = $my_array;
echo "Tôi đã học những ngôn ngữ như $a , $b và $c tại laptrinhtudau.com";
?>

Kết quả

Tôi đã học những ngôn ngữ như PHP , Java và Python tại laptrinhtudau.com

Ta có thể thấy những biến đã được gán như thể chúng là một mảng vậy. Các biến sẽ được gán lần lượt với những phần tử trong mảng. Và mình đã in ra những giá trị của nó như ví dụ trên.

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

Ví dụ 1:

<?php

$info = array('coffee', 'brown', 'caffeine');

// Liệt kê tất cả các biến
list($drink, $color, $power) = $info;
echo "$drink có màu $color và $power làm ta tỉnh táo <br>";

// Liệt kê một số tham số
list($drink, , $power) = $info;
echo "$drink có chứa $power <br>";

// Hoặc chúng ta hãy bỏ qua những tham số chỉ truyền tham số thứ ba
list( , , $power) = $info;
echo "Tôi rất thích $power! <br>";

// list() không hoạt động với chuỗi
list($bar) = "abcde";
var_dump($bar); // NULL
?>

Kết quả

coffee có màu brown và caffeine làm ta tỉnh táo
coffee có chứa caffeine
Tôi rất thích caffeine!
NULL

Đây là một số cách mà hàm list() sẽ hoạt động . Lưu ý rằng hàm list() sẽ trả về Null nếu ta truyền vào một chuỗi giống như ví dụ trên. Với list() thì ta có thể bỏ qua một số tham số nếu ta không cần định nghĩa chúng.

Ví dụ 2: sử dụng list() với vòng lặp

<?php
$arrays = [[1, 2], [3, 4], [5, 6]];

foreach ($arrays as list($a, $b)) {
    $c = $a + $b;
    echo($c . ', '); 
}
?>

Kết quả

3, 7, 11,

Ngoài ra ta cũng có thể sử dụng list() lồng nhau. Hãy cẩn thận một chút nếu không muốn bị loạn nhé.

<?php

list($a, list($b, $c)) = array(1, array(2, 3));

var_dump($a, $b, $c);

?>

Kết quả

int(1) int(2) int(3)

Ví dụ 3:

<?php
$foo = array(2 => 'a', 'foo' => 'b', 0 => 'c');
$foo[1] = 'd';
list($x, $y, $z) = $foo;
echo '<pre>';
var_dump($foo, $x, $y, $z);
?>

Kết quả

array(4) {
  [2]=>
  string(1) "a"
  ["foo"]=>
  string(1) "b"
  [0]=>
  string(1) "c"
  [1]=>
  string(1) "d"
}
string(1) "c"
string(1) "d"
string(1) "a"

Thứ tự mà các chỉ số của mảng được sử dụng bởi hàm list() được xác định là không liên quan. Ta có thể thấy qua thứ tự của các phần tử được so sánh với thứ tự mà chúng được viết trong cú pháp list()